漢諾塔:漢諾塔(又稱河內塔)問題是源於印度乙個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片**圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動乙個圓盤。
規定,按大小順序重新擺放在另一根柱子上,在小圓盤上不能放大圓,在三根柱子之間一次只能移動乙個圓盤。
如:
遞迴解析:
理解什麼是遞迴:
若在乙個函式、過程或者資料結構定義的內部又直接(或間接)出現定義本身的應用
則稱它們是遞迴的,或者是遞迴定義的。
可以使用遞迴的方法基本由三種
1.定義是遞迴(階乘函式)
2.資料結構是遞迴(遊歷圖表)
3.問題的解法是遞迴(hanoi塔問題,八皇后問題、迷宮問題)
以漢諾塔4層為例:
1.用c柱作為過渡,將a柱上的 n-1 個盤子移動到b柱上。
a------>b;
a------>c;
b------>c;
//a------>b;
c------>a;
c------>b;
a------>b;
完成以c柱為過渡端,將 4 - 1 個盤子移動到b柱上。
2.將a柱上的最後乙個盤子直接移動的c柱上。
a------>c;
3.用a柱作為過渡,將b柱上的 n-1 個盤子移動到c柱上。
b------>c;
b------>a;
c------>a;
//b------>c;
a------>b;
a------>c;
b------>c;
完成以a柱為過渡端,將 4 - 1 個盤子移動的c柱上。
c語言**:
/*****漢諾塔遞迴實現*****/
#include
void
hanno_move
(int n,
char a,
char b,
char c)
;int
main
(void
)void
hanno_move
(int n,
char a,
char b,
char c)
``
hanno 漢諾塔 問題
漢諾塔是乙個經典的函式遞迴實現的問題 三根柱子,把n片盤子從from柱借助temp柱移動到to柱,可將此過程分為三步 第一步 將n 1個盤子從from柱借助to柱移動到temp柱 第二步 將第n個盤子從from柱移動到to柱 第三步 將n 1個盤子從temp柱借助from柱移動到to柱 即可完成整個...
經典問題 C語言資料結構 漢諾塔 遞迴
漢諾塔可以說是非常經典的遞迴呼叫的例子,關於它的 有興趣可以自己查一下。它的操作形象點講就是 在a b c三根柱子中,將a柱子上的n個圓盤 從上到下圓盤直徑依次增大的堆疊方式 利用b和c移動到c柱子上,並且每次只能移動乙個圓盤,小圓盤必須在大圓盤上面。實現步驟 1 假設a中共有n個圓盤,先將其中的n...
資料結構11 漢諾塔問題
漢諾塔是乙個經典遞迴問題,但是我覺得確實有點繞,看了一會兒,總算有點眉目吧 假設有n層圓盤需要挪動,需要從x,y,z之間移動,那麼目的就是將最後一層的圓盤挪動到z軸上,但是要完成這一步,就需要將前n 1層所有的圓盤,按照從小到大的順序暫時放置在y軸上。將最後乙個圓盤放置到z上的時候,需要將y上的n ...