遞迴解決 Tower of Hanoi 問題

2021-07-11 06:12:28 字數 798 閱讀 1968

原創:

自己感覺寫的沒有原博主的那麼容易理解,於是就站在巨人的肩膀上摘蘋果,感謝部落格主。

演算法:當只有乙個盤子的時候,只需要從將a塔上的乙個盤子移到c塔上。

當a塔上有兩個盤子是,先將a塔上的1號盤子(編號從上到下)移動到b塔上,再將a塔上的2號盤子移動的c塔上,最後將b塔上的小盤子移動到c塔上。

當a塔上有3個盤子時,先將a塔上編號1至2的盤子(共2個)移動到b塔上(需借助c塔),然後將a塔上的3號最大的盤子移動到c塔,最後將b塔上的兩個盤子借助a塔移動到c塔上。

當a塔上有n個盤子是,先將a塔上編號1至n-1的盤子(共n-1個)移動到b塔上(借助c塔),然後將a塔上最大的n號盤子移動到c塔上,最後將b塔上的n-1個盤子借助a塔移動到c塔上。

綜上所述,除了只有乙個盤子時不需要借助其他塔外,其餘情況均一樣(只是事件的複雜程度不一樣)。

#include#include#includeusing namespace std;

// 第乙個是初始塔 第二個是轉移塔 第三個是目的塔,

int i=1;

void move(int n,char from,char to)

void hanoi(int n,char from,char depend_on,char to)

// 仔細想一下 就能 感受到遞迴的強大。

}int main()

遞迴 遞迴法解決排列問題

方法1 程式大致結構 約定 pl len pl 為最終放置結果的陣列 len為陣列的長度 ele為參與排列的個元素出現的個數 i為pl中下標 假設參與排列的元素有abcd run ele,int i 注意 在遞迴塊內,不應對所傳入的引數進行改變 每個遞迴塊所得到的原始引數應保持一致。舉例 abcde...

報數 遞迴解決 (c)

首先 描述題目 括號內部是解釋 對上一層的藐視 輸入輸出 11 一 211 乙個一 321 兩個一 41212 乙個二,乙個一 511121112 乙個一,乙個二,乙個一,乙個二 631123112 三個一,乙個二,三個一,乙個二 這樣例如你輸入5就會輸出 11121112 實現 遞迴 includ...

迷宮問題 遞迴解決

建立人 wdl 建立時間 2021 3 21 描述 public class migong 左右全部置為1 for int i 0 i 8 i 設定擋板,1表示 map 3 1 1 map 3 2 1 map 1 2 1 map 2 2 1 輸出地圖 system.out.println 地圖的情況...