經典遞迴漢諾塔

2021-07-15 17:24:25 字數 887 閱讀 9368

演算法:當只有乙個盤子的時候,只需要從將a塔上的乙個盤子移到c塔上。

當a塔上有兩個盤子是,先將a塔上的1號盤子(編號從上到下)移動到b塔上,再將a塔上的2號盤子移動的c塔上,最後將b塔上的小盤子移動到c塔上。

當a塔上有3個盤子時,先將a塔上編號1至2的盤子(共2個)移動到b塔上(需借助c塔),然後將a塔上的3號最大的盤子移動到c塔,最後將b塔上的兩個盤子借助a塔移動到c塔上。

當a塔上有n個盤子是,先將a塔上編號1至n-1的盤子(共n-1個)移動到b塔上(借助c塔),然後將a塔上最大的n號盤子移動到c塔上,最後將b塔上的n-1個盤子借助a塔移動到c塔上。

綜上所述,除了只有乙個盤子時不需要借助其他塔外,其餘情況均一樣(只是事件的複雜程度不一樣)。

[cpp]view plain

copy

print?

#include 

//第乙個塔為初始塔,中間的塔為借用塔,最後乙個塔為目標塔

inti=1;

//記錄步數

void

move(

intn,

char

from,

char

to) 

//將編號為n的盤子由from移動到to

void

hanoi(

intn,

char

from,

char

denpend_on,

char

to)//將n個盤子由初始塔移動到目標塔(利用借用塔)

}  void

main()  

經典遞迴題 漢諾塔

漢諾塔遊戲 在這個遊戲中,我們 或者是以為神話中的祭司 有n個不用大小的盤 子和3根木樁。一開始,所有的盤子都按照大小順序套在第1根木樁上,最大的盤子 在底部,最小的盤子在頂部。我們的目的是把所有的盤子都移到第3根木樁上去,在 必要的時候可以借助第2根木樁。我們每次只能移動乙個盤子,但是不能把較大的...

經典遞迴問題 漢諾塔

漢諾塔 漢諾塔問題第一次接觸時就感覺非常有趣,但是由於當時知識有限不能深刻地理解遞迴的含義,所以沒能繼續深究,現在來談一談吧。題目描述 漢諾塔 於印度傳說的乙個故事,上帝創造世界時作了三根金剛石柱子,在一根柱子上從上往下從小到大順序摞著64片 圓盤。上帝命令婆羅門把圓盤從下面開始按大小順序重新擺放在...

經典遞迴題目 漢諾塔

漢諾塔是乙個非常經典的遞迴問題。解決這種遞迴問題,從最簡單的情況開始著手。設現在有三個位置,分別是起始位置,過渡位置,目標位置。假設 n 1,那麼直接一步就可以了。n 2 時,我們需要把起始位置上面的小的一塊先放到 過渡位置,然後把大的一塊放到目標位置。再把小的放到大的上去。n 3 時,可以看到,要...