遞迴演算法 漢諾塔問題

2021-08-18 12:01:55 字數 703 閱讀 7839

圖1 漢諾塔分析——三個過程

//漢諾塔問題,經典遞迴問題

//遞迴問題的關鍵:

//1.如何縮小問題的規模

//2.如何解決最簡單問題

//即:1找出遞迴體,2找出遞迴出口

//試圖追蹤程式執行過程,都是徒勞的

//2023年4月10日10:49:46 by 楷諧之力

#includevoid move(char frm,char to)

void hanoi(int n,char frm,char to,char buff)//漢諾塔問題

else

}int main()

用數學語言表達,假設(前)「將n-1個盤子從a針移動到b針」所需次數為hn-1,總移動次數為hn,那麼可以得出的關係就是:hn=hn-1x 2 + 1.

hn=hn-1 x 2 + 1 這個公式,就可以套用、套用、套用……直到h3=7,h2=3,h1=1。

最後,用最懶的數學歸納法證明通項公式

hn = 2^n - 1 吧!

圖2 程式執行結果

漢諾塔問題遞迴演算法

1.題目 漢諾塔 hanoi tower 又稱河內塔,源於印度乙個古老傳說。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片 圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,任何時候,在小圓盤上都不能放大圓盤,且在三根柱子之間一次只...

遞迴演算法 漢諾塔問題

程式呼叫自身的程式設計技巧稱為遞迴。乙個過程或函式在其定義或說明中又直接或間接地呼叫自身的一種方法,通常把乙個大型複雜的問題層層轉化為乙個與原問題相似的規模較小的問題來求解。遞迴策略只需少量的程式就可描述出解題過程所需要的多次重複計算,大大地減少了程式的 量。遞迴的能力在於用有限的語句來定義物件的無...

漢諾塔 遞迴演算法

個人覺得漢諾塔這個遞迴演算法比電子老鼠的難了一些,不過一旦理解了也還是可以的,其實網上也有很多 可以直接參考。記得大一開始時就做過漢諾塔的習題,但是那時 寫得很長很長,也是不理解遞迴的結果。現在想起來漢諾塔的演算法就3個步驟 第一,把a上的n 1個盤通過c移動到b。第二,把a上的最下面的盤移到c。第...