上圖為 3 階 hanoi 塔
假設有三個命名為 a b c 的塔座 ,在塔座a上插有n個直徑大小不相同,由小到大編號為1 ,2 ,3 ,··· ,n的圓盤,要求將a座上的圓盤移至塔座c
並按同樣的順序疊排
圓盤移動必須遵守下列規則:
1:每次只能移動乙個圓盤 2:圓盤可以插在任意乙個塔座上 3:任何時刻都不能將乙個較大的圓盤放在乙個較小的圓盤上
舉個例子,若是3階hanoi 塔,則需要七步。 1—c,2—b,1—b,3—c,1—a,2—c,1—c。
那若為n階hanoi 塔,我們也可以將其看為2階,即n和n-1:將n-1移至b,將n移至c,再將n-1移至c。
再將n-1看為2階,即n-1和n-2。 ..........
以此類推直到1階。
以上步驟反著加,即為n階的所需步數,可看為遞迴函式。
以下為**
#include
void hanoi(int i , char a , char b , char c);
void move(int i , char x , char y);
int main()
void hanoi(int i , char a , char b , char c)
else
}void move(int i , char x , char y)
hanoi塔問題分析
這個問題起源於乙個類似傳說故事,在hanoi這個地方有乙個寺廟,這裡有3根柱子和64個大小不同的金碟子。每個碟子有乙個孔可以穿過。所有的碟子都放在第乙個柱子上,而且按照從上到下碟子的大小依次增大的順序擺設。如下圖 現在,假定寺廟裡的僧侶要移動這些碟子,將它們從最左邊移動到最右邊的柱子上。不過移動的規...
遞迴實現hanoi塔問題演算法
三個塔座,x y z x上有n個直徑大小各不相同從大到小依次編號為n的圓盤,將x塔上的圓盤移到z塔,要求 每次只能移動乙個圓盤 任何時候不能將較大的圓盤壓在較小的圓盤之上 演算法分析 如果x塔上只有乙個圓盤,則直接移到z軸上即可 如果x塔上圓盤個數 1,先將x塔上的n 1個盤借助z塔依次挪到y塔上,...
遞迴 Hanoi塔問題
題目 hanoi塔問題,遊戲規則 1 每次只能移動乙隻圓盤 2 任何時候大圓盤不能壓在小圓盤之上 3 任何時候都不允許將圓盤放在三根立軸之外的任何地方。分析 遞迴的 base case 當只有乙個圓盤的時候,直接從圓盤所在的立軸移動到目標立軸,即完成。遞迴的 recursion rule 如圖所示,...