漢諾塔可以說是非常經典的遞迴呼叫的例子,關於它的**有興趣可以自己查一下。它的操作形象點講就是:在a、b、c三根柱子中,將a柱子上的n個圓盤(從上到下圓盤直徑依次增大的堆疊方式)利用b和c移動到c柱子上,並且每次只能移動乙個圓盤,小圓盤必須在大圓盤上面。
實現步驟:
1、假設a中共有n個圓盤,先將其中的n-1個圓盤借助c移動到b
2、再將a上的最後乙個圓盤移動到c
3、最後一步就是將b上的圓盤借助a移動到c,類似於第一步
總體思路:
實現**:
#include
/*啟發思路:1、將 n-1個盤子先放到b上
2、將a上剩下的乙個盤移動到c上
3、將n-1個盤從b移動到c上
*/void
hanoi
(int n,
char x ,
char y,
char z)
}//永遠是列印第乙個變數和最後乙個變數(這兩個量會不斷變化,千萬別混淆x,y,z)
intmain()
執行結果:
不管圓盤最初在哪個柱子上,思想都是一樣的。
經典漢諾塔問題
這幾天在家看完了 程式設計師的數學 這本書,裡面的內容深入淺出比較容易理解,將乙個個晦澀的數學概念用經典例題講解,使人不覺得枯燥。這本書看第一遍有兩處地方卡殼,不是很懂,再看第二遍大致能捋清了,其中乙個就是我這篇文章要講的經典漢諾塔問題。漢諾塔是乙個由數學家愛德華 盧卡斯 edward lucas ...
資料結構11 漢諾塔問題
漢諾塔是乙個經典遞迴問題,但是我覺得確實有點繞,看了一會兒,總算有點眉目吧 假設有n層圓盤需要挪動,需要從x,y,z之間移動,那麼目的就是將最後一層的圓盤挪動到z軸上,但是要完成這一步,就需要將前n 1層所有的圓盤,按照從小到大的順序暫時放置在y軸上。將最後乙個圓盤放置到z上的時候,需要將y上的n ...
經典漢諾塔問題分析
漢諾塔 於印度傳說的乙個故事,上帝創造世界時作了三根金剛石柱子,在一根柱子上從上往下從小到大順序摞著64片 圓盤。上帝命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一回只能移動乙個圓盤,只能移動在最頂端的圓盤。有預言說,這件事完成時宇宙會...