遞迴定義:
遞迴演算法是把問題轉化為規模縮小了的同類問題的子問題。然後 遞迴呼叫函式(或過程)來表示問題的解。
乙個過程(或函式)直接或間接呼叫自己本身,這種過程(或函式)叫遞迴過程(或函式).
遞迴演算法解決問題的特點:
(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 隨著遞迴演算法的演進...