遞迴之漢諾塔

2021-08-18 16:07:40 字數 1104 閱讀 6533

漢諾塔

time limit: 1000 ms memory limit: 65536 kib

submit statistic

problem description

漢諾塔(又稱河內塔)問題是印度的乙個古老的傳說。

開天闢地的神勃拉瑪在乙個廟裡留下了三根金剛石的棒a、b和c,a上面套著n個圓的金片,最大的乙個在底下,其餘乙個比乙個小,依次疊上去,廟裡的眾僧不倦地把它們乙個個地從a棒搬到c棒上,規定可利用中間的一根b棒作為幫助,但每次只能搬乙個,而且大的不能放在小的上面。

僧侶們搬得汗流滿面,可惜當n很大時這輩子恐怕就很搬完了。

聰明的你還有計算機幫你完成,你能寫乙個程式幫助僧侶們完成這輩子的夙願嗎?

input

輸入金片的個數n。這裡的n<=10。

output

輸出搬動金片的全過程。格式見樣例。

sample input

2 sample output

move disk 1 from a to b

move disk 2 from a to c

move disk 1 from b to c

hint

可以用遞迴演算法實現。

source

#include

#include

void move(int n,char x,char y,char z)

else

}int main()

think:假設有x,y,z三根柱子

思路大體就是先把上面的n-1個借助z柱子從x搬到y上,然後再把最後乙個搬到z柱子上,然後再借助x柱子把前n-1個從y移動到z上,這樣的話大體就是分為了2個部分,前n-1個和最後乙個;

關鍵部分就是這個遞迴是怎麼執行的:

這個遞迴函式呼叫的時候是傳遞的是呼叫他的函式中的引數對應的值,而當進入這個函式的時候,就直接是給相應的定義裡面的變數賦值,賦予的值就是傳遞過來的值,弄懂這一點就好了;中退出的時候退到的位置是呼叫的某個函式之後

遞迴之 漢諾塔

遞迴思想的概念 即將乙個複雜問題分解成一系列小的問題,並且這些小問題都具有相同的情形。此時可運用遞迴的思想來解決更易於理解 但並不一定是效率最高的哦 遞迴演算法有三個關鍵點 1 了解題意是否適用遞迴來解決 2 有明確的終止條件 通常是分解出來的一系列小問題裡最簡單的那種情況 3 隨著遞迴演算法的演進...

遞迴之漢諾塔

問 如何移?最少要移動多少次?解法的基本思想是遞迴。假設有a b c三個塔,a塔有n塊盤,目標是把這些盤全部移到c塔。那麼首先將c塔作為中介,把a塔頂部的n 1塊盤移動到b塔,再把a塔剩下的n移到c,最後將a塔作為中介,把b塔的n 1塊盤移到c。每次移動多於一塊盤時,則再次使用上述演算法來移動。第一...

漢諾塔 遞迴

個人理解遞迴函式的基本要求就是,函式中呼叫函式本身,滿足特定的條件後返回。include include include include include include include include include include include include include 標頭檔案引用的較多...