三個柱子 A、B、C。在A柱子從上到下 按照從小到大的順序放置64盤子,命令將全部的盤子從A柱子移至C柱子,而且搬運過程當中小盤子不能放在大盤子上面,且 在三根柱子之間一次只能移動一個盤子函數
(1) 一個盤子 :spa
1: A--->Ccode
(2) 兩個盤子:遞歸
(3)三個盤子:ip
(4)四個盤子 :string
用n表示盤子總數it
(1)當只有一個盤子(n=1)的時候,直接從A到C;io
(2)當有兩個盤子(n=2)的時候,將第二根柱子B當作輔助柱,共三步;function
第一個盤子(n-1)從A到B,第二個盤子(n)從A到C,第一個盤子(n-1)從B到C。
(3)當盤子個數超過2(你>2)個時,其實就是 經過 遞歸 處理兩個盤子(每次只走三步):(n-1)A—>B, (n)A-->C, (n-1)B-->C ;即:深度遍歷二叉樹class
//allSteps :用於存放移動的每一步驟 let allSteps=[]; /* * 移動盤子的遞歸函數 * @param {number} n 當前處理的盤子 * @param {string} a , b ,c 表明當前的三根柱子 */ function move(n,a,b,c){ if(n===1){ allSteps.push({ n:n, from:a, to:c }) }else{ move(n-1,a,c,b); allSteps.push({ n:n, from:a, to:c }); move(n-1,b,a,c); } }