漢諾塔問題:有三根相鄰的柱子,標號為a,b,c,a柱子上從下到上按金字塔狀疊放著n個不同大小的圓盤,要把所有盤子乙個乙個移動到柱子b上,並且每次移動同一根柱子上都不能出現**子在小盤子上方,求至少需要多少次移動。
我們首先假設n=1,那麼move(n)=1,因為這時候只需要從a->c便可以。接下來假設n=2,那麼move(n)=3 即a->b,a->c,b->c; 假設n=3,move(n)=7 即a->c,a->b,c->b,a->c,b->a,b->c,a->c,我們可以把move(n)看作是把n個盤子移動到某個柱子上,於是move(n)=move(n-1)+1+move(n-1),代表的意思便是將n-1個盤子搬到b,再將最底下最大的盤子搬到c,然後再將n-1個盤子搬回到c,達到目的。遞迴的終止條件當然就是move(1)=1以及move(2)=3
#include usingnamespace
std;
int sum = 0
;void hanoi(char
from,char by,char to,int
n)
else
if(n==2
)
hanoi(
from,to,by,n-1
); sum++;
hanoi(by,
from,to,n-1);}
intmain()
如果不需要列印路徑只要求次數的話,次數的遞推式便是move(n)=(n==1?1:(move(n-1)*2+1)) (也就是迴圈2*i+1)
遞迴解決漢諾塔問題
何為漢諾塔問題 漢諾塔 hanoi tower 又稱河內塔,源於印度乙個古老傳說。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片 圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,任何時候,在小圓盤上都不能放大圓盤,且在三根柱子之間...
遞迴解決漢諾塔問題
漢諾塔 漢諾塔 又稱河內塔 問題是源於印度乙個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片 圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動乙個圓盤。c語言實...
Python遞迴解決漢諾塔問題
漢諾塔 漢諾塔 又稱河內塔 問題是源於印度乙個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片 圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動乙個圓盤。實現 如...