這個問題起源於乙個類似傳說故事,在hanoi這個地方有乙個寺廟,這裡有3根柱子和64個大小不同的金碟子。每個碟子有乙個孔可以穿過。所有的碟子都放在第乙個柱子上,而且按照從上到下碟子的大小依次增大的順序擺設。如下圖:
現在,假定寺廟裡的僧侶要移動這些碟子,將它們從最左邊移動到最右邊的柱子上。不過移動的規則如下:
1. 每次只能從乙個柱子的最上面移動乙個碟子到另外乙個柱子上。
2. 不能將大碟子放到小碟子的上面。
按照前面這個規則,我們該怎麼去移動這些碟子呢?假定單位時間內可以移動一片碟子,那麼最終移動這些碟子到目的柱子需要多長的時間呢?(古老的直著們說等64個大小不同的金碟子全部移動完畢,那麼世界末日也就到了)
總結
hanoi塔問題是一
個經典的遞迴迴圈問題,其本身的複雜度達到了指數函式級別。所以使得運算時間的增長非常快。通過一種遞迴的思路,首先我們可以總結出乙個問題的遞迴描述方式。然後我們再通過不斷的代入和分析,去發現形成等式的規律。這是一種發現遞迴問題等式描述的方法。為了保證方法最終的正確性,我們還需要經常使用數學歸納法來證明這個等式的正確性。
**如下:
#include int i=1;
void move(int n,char x,char z)
void hanoi(int n,char x,char y,char z)
} int main()
return 0;
}
演算法分析 Hanoi塔問題
上圖為 3 階 hanoi 塔 假設有三個命名為 a b c 的塔座 在塔座a上插有n個直徑大小不相同,由小到大編號為1 2 3 n的圓盤,要求將a座上的圓盤移至塔座c 並按同樣的順序疊排 圓盤移動必須遵守下列規則 1 每次只能移動乙個圓盤 2 圓盤可以插在任意乙個塔座上 3 任何時刻都不能將乙個較...
遞迴 Hanoi塔問題
題目 hanoi塔問題,遊戲規則 1 每次只能移動乙隻圓盤 2 任何時候大圓盤不能壓在小圓盤之上 3 任何時候都不允許將圓盤放在三根立軸之外的任何地方。分析 遞迴的 base case 當只有乙個圓盤的時候,直接從圓盤所在的立軸移動到目標立軸,即完成。遞迴的 recursion rule 如圖所示,...
hanoi塔問題(遞迴問題)
hanoi塔問題是比較經典的遞迴問題,很多學生從大一開始學習c語言遞迴時都或許會碰到這個問題,但很多同學一開始都是一知半解的,現在我來領大家一起重新學習一下hanoi問題,讓我們一起對遞迴函式有更好的理解。設n為hanoi塔的盤子的數量。a,b,c是三根支柱,hanoi 函式要求將所有的盤從a借助b...