話不多說直接上**
#include
void move(int n ,char from ,char to)
void hanoi(int n ,char from,char depend,char to)
else
}int main(
)
思路:
不管多少個盤子(乙個盤子的時候除外),全部都看作是兩個盤子
即 最下面的那乙個,和其上面的(n-1)個。
這樣兩個盤子的時候,移動就非常簡單了。
總共有三步:
1.將第乙個(也就是n-1)個盤子借助c柱從a柱移動到b柱。
2.將最下面的那乙個盤子直接從a柱移動到c柱。
3.最後將b柱的那些(n-1)個盤子借助a柱移動到c柱。
所以在入口引數的時候需要,起始柱,借助柱(有點繞口),目的柱。
剛開始可能有些看不太懂,可以先輸入幾個簡單的數,用斷點除錯,看一下他的移動過程。
遞迴函式的終點就是只剩乙個盤子的時候,直接移動到目的柱。
如果明白了就不用看***的廢話了
假設有64個盤子,那麼問題就成了移動63和最下面的盤子。分成了兩組去完成我上述說的那三步。
接著63個盤子去做第一步時就已經開始了遞迴。
遞迴到下一級時,就意味著再把63個盤子看成乙個整體。分成兩部分,最下面的一塊和上面的62塊。去完成這件事,以此類推,直到第一塊。
因為只有前62塊都完成移動,才可以移動到第六十三塊。
不要去想著這個過程,很容易繞暈的,只需要知道這個函式的功能就是移動盤子。
***下篇部落格寫漢諾塔非遞迴演算法,c語言實現。 ***
參考部落格
C 遞迴實現漢諾塔
a為存放盤子的塔,b為目標塔,c為輔助塔 演算法分為三步 一 將a上n 1個盤子全部放到c塔上 二 將a上剩下的乙個盤子放到b塔上 三 將c塔上的盤子全部放到b塔上 注 不需要考慮如何移動n 1個盤子 遞迴過程 首先,將a上n 1個盤子放到c上,然後將a上剩下的乙個盤子放到b上,然後可以看成a為輔助...
C 漢諾塔遞迴實現
程式背景 漢諾塔 tower of hanoi 又稱河內塔,問題是源於印度乙個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片 圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之...
漢諾塔遞迴的c語言遞迴實現
include include using namespace std void move int n,char from,char rely,char to else int main 漢諾塔遞迴演算法思路如下 三個柱子 起點柱子 from,依賴柱子 rely,目標柱子 to 演算法流程 函式引數...