大學的時候專業課程很差,指導大二學習演算法設計的時候,發現專業課裡比較有趣的一門。專心學習了一學期
最近在學習python發現了乙個遞迴演算法很迷茫,遂研究了一下。
簡單來說明一下:首先漢諾塔的規則是1、每次移動一塊 2、小木塊只能放在大木塊上 3、將所有木塊從a柱子移動c柱子木塊上
用幾個變數和常量來表示 n表示一共有多少木塊 a、b、c分別表示柱子
那麼如果n=1木塊 這個就是好說,移動的方式就是 a---->c
n=2 移動的方式就是 a---->b 、a---->c 、b---->c
n=3 移動的方式就是 a-->c a-->b c-->b a-->c b-->a b-->c a-->c
依次類推 我們可以簡化為只有兩塊,那麼移動只需要三步
第一步:把上面的n-1塊木塊 從來a---->b
第二步: 然後把最下面那塊 從a---->c
第三步:最後把b上面的n-1塊移動到c
a 0,b n-1,c 1;
那麼接下來就是 就相當於把b當成a 位置的柱子,把n-1木塊看成新的n塊木塊
重複以上步驟
抽象成方法就是
move(n、a、b、c);
呼叫時每次都是a---->c
第一步 move(n-1、a、c、b);
第二步 move(1、a、b、c);
第三步 move(n-1、b、a、c);
這樣就完成了木塊的遞迴移動
漢諾塔 遞迴演算法
個人覺得漢諾塔這個遞迴演算法比電子老鼠的難了一些,不過一旦理解了也還是可以的,其實網上也有很多 可以直接參考。記得大一開始時就做過漢諾塔的習題,但是那時 寫得很長很長,也是不理解遞迴的結果。現在想起來漢諾塔的演算法就3個步驟 第一,把a上的n 1個盤通過c移動到b。第二,把a上的最下面的盤移到c。第...
漢諾塔 遞迴
個人理解遞迴函式的基本要求就是,函式中呼叫函式本身,滿足特定的條件後返回。include include include include include include include include include include include include include 標頭檔案引用的較多...
遞迴漢諾塔
遞迴問題 遞迴要有三個要素 1.遞迴結束條件 2.遞迴結束時的處理 3.抽取重複的邏輯,剝離外殼 重點都在這一步 漢諾塔問題 把圓盤從下面開始按大小順序重新擺放在另一根柱子上。且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動乙個圓盤。首先,要搞這個編碼得要知道漢諾塔的解題思路 1.把a塔上...