以此類推是遞迴的基本思想。
具體來講就是把規模大的問題轉化為規模小的相似的子問題來解決。在函式實現時,因為解決大問題的方法和解決小問題的方法往往是同乙個方法,所以就產生了函式呼叫它自身的情況。另外這個解決問題的函式必須有明顯的結束條件,這樣就不會產生無限遞迴的情況了。
遞迴的兩個條件
(1)可以通過遞迴呼叫來縮小問題規模,且新問題與原問題有著相同的形式。(自身呼叫)
(2)存在一種簡單情境,可以使遞迴在簡單情境下退出。(遞迴出口)
def func(mode):
if endcondition:
return
else:
func(mode_small)
在求解6的階乘時,遞迴過程如下所示。
我們會驚奇的發現這個過程和棧的工作原理一致,遞迴呼叫就是通過棧這種資料結構完成的。整個過程實際上就是乙個棧的入棧和出棧問題。然而我們並不需要關心這個棧的實現,這個過程是由系統來完成的。
那麼遞迴中的「遞」就是入棧,遞進;「歸」就是出棧,回歸。
斐波那契數列
斐波那契數列的遞推公式:
fib(n)=fib(n-1)+fib(n-2)
指的是如下所示的數列:
1、1、2、3、5、8、13、21.....
python實現
class sf():
def fib(self,n):
if n == 1:
return 1
elif n == 2:
return 1
else:
return self.fib(n-1)+self.fib(n-2)
if __name__ == '__main__':
a = sf()
for i in range(1,10):
print(a.fib(i))
輸出結果
112
35813
2134
深入理解遞迴
以此類推是遞迴的基本思想。具體來講就是把規模大的問題轉化為規模小的相似的子問題來解決。在函式實現時,因為解決大問題的方法和解決小問題的方法往往是同乙個方法,所以就產生了函式呼叫它自身的情況。另外這個解決問題的函式必須有明顯的結束條件,這樣就不會產生無限遞迴的情況了。遞迴的兩個條件 遞迴演算法的一般形...
深入理解遞迴
遞迴例子 includevoid up and down int int main void void up and down int n level 1 1 location 0022ff10 level 2 1 location 0022fef0 level 3 1 location 0022f...
深入理解遞迴演算法
下面是對遞迴演算法執行過程的理解 結合漢諾塔問題 原始碼 public class hanoi else public static void main string args 為了方便我等下解釋執行過程,也把 的截圖貼在下面 準備工作做完了,正式開始理解過程的講解 以漢諾塔三個圓盤時為例,這裡n ...