遞迴演算法之漢諾塔

2022-05-05 12:09:14 字數 1233 閱讀 9061

遞迴定義:

遞迴演算法是把問題轉化為規模縮小了的同類問題的子問題。然後 遞迴呼叫函式(或過程)來表示問題的解。

乙個過程(或函式)直接或間接呼叫自己本身,這種過程(或函式)叫遞迴過程(或函式).

遞迴演算法解決問題的特點:

(1) 遞迴就是在過程或函式裡呼叫自身。

(2) 在使用遞迴策略時,必須有乙個明確的遞迴結束條件,稱為遞迴出口。

(3) 遞迴演算法解題通常顯得很簡潔,但遞迴演算法解題的執行效率較低。所以一般不提倡用遞迴演算法設計程式。

(4) 在 遞迴呼叫的過程當中系統為每一層的返回點、區域性量等開闢了棧來儲存。遞迴次數過多容易造成 棧溢位等。所以一般不提倡用遞迴演算法設計程式。

例子:漢諾塔

解:(1)n == 1

第1次  1號盤  a---->csum = 1 次

(2)  n == 2

第1次  1號盤  a---->b

第2次  2號盤  a---->c

第3次  1號盤  b---->c        sum = 3 次

(3)n == 3

第1次  1號盤  a---->c

第2次  2號盤  a---->b

第3次  1號盤  c---->b

第4次  3號盤  a---->c

第5次  1號盤  b---->a

第6次  2號盤  b---->c

第7次  1號盤  a---->c        sum = 7 次

不難發現規律:1個圓盤的次數 2的1次方減1

2個圓盤的次數 2的2次方減1

3個圓盤的次數 2的3次方減1

n個圓盤的次數 2的n次方減1

故:移動次數為:2^n - 1

**實現:

//

topn盤子個數,from-->初始塔座 inter-->輔助塔座 to-->最終塔座

public

static

void dotower(int topn, char from, char inter, char

to)

else

}

漢諾塔 遞迴演算法

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

漢諾塔遞迴演算法

大學的時候專業課程很差,指導大二學習演算法設計的時候,發現專業課裡比較有趣的一門。專心學習了一學期 最近在學習python發現了乙個遞迴演算法很迷茫,遂研究了一下。簡單來說明一下 首先漢諾塔的規則是1 每次移動一塊 2 小木塊只能放在大木塊上 3 將所有木塊從a柱子移動c柱子木塊上 用幾個變數和常量...

遞迴之 漢諾塔

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