漢諾塔是乙個非常經典的遞迴問題。
解決這種遞迴問題,從最簡單的情況開始著手。
設現在有三個位置,分別是起始位置,過渡位置,目標位置。
假設 n = 1,那麼直接一步就可以了。
n = 2 時,我們需要把起始位置上面的小的一塊先放到 過渡位置,然後把大的一塊放到目標位置。再把小的放到大的上去。
n = 3 時,........
可以看到,要想把起始位的最大塊放大目標位,必須把它前 n-1 塊放到過渡位置上,然後把最大塊移動到目標位,再把n-1塊移動到目標位,完成。
f(n) 代表把n塊從乙個位置移動到另乙個位置上所需要操作的次數。n過程
次數111
21+1+133
3+1+374
7+1+7
15......
.....
n-1f(n-2)+1+f(n-2)
f(n-1)
nf(n-1)+1+f(n-1)
f(n) = 2*f(n-1)+1
程式如下。
其中引數部分,n 代表需要移動的塊數, a 代表起始位置,b 代表過渡位置,c 代表目標位置。
//輸出移動過程
hanoi( int n, char a, char b, char c)
}hanoi( 5 , 'a', 'b', 'c');
//計算移動次數
hanoi( int n, char a, char b, char c)
}
經典遞迴漢諾塔
演算法 當只有乙個盤子的時候,只需要從將a塔上的乙個盤子移到c塔上。當a塔上有兩個盤子是,先將a塔上的1號盤子 編號從上到下 移動到b塔上,再將a塔上的2號盤子移動的c塔上,最後將b塔上的小盤子移動到c塔上。當a塔上有3個盤子時,先將a塔上編號1至2的盤子 共2個 移動到b塔上 需借助c塔 然後將a...
經典遞迴題 漢諾塔
漢諾塔遊戲 在這個遊戲中,我們 或者是以為神話中的祭司 有n個不用大小的盤 子和3根木樁。一開始,所有的盤子都按照大小順序套在第1根木樁上,最大的盤子 在底部,最小的盤子在頂部。我們的目的是把所有的盤子都移到第3根木樁上去,在 必要的時候可以借助第2根木樁。我們每次只能移動乙個盤子,但是不能把較大的...
經典遞迴問題 漢諾塔
漢諾塔 漢諾塔問題第一次接觸時就感覺非常有趣,但是由於當時知識有限不能深刻地理解遞迴的含義,所以沒能繼續深究,現在來談一談吧。題目描述 漢諾塔 於印度傳說的乙個故事,上帝創造世界時作了三根金剛石柱子,在一根柱子上從上往下從小到大順序摞著64片 圓盤。上帝命令婆羅門把圓盤從下面開始按大小順序重新擺放在...