深入理解遞迴

2021-08-20 23:22:43 字數 1162 閱讀 2131

以此類推是遞迴的基本思想。

具體來講就是把規模大的問題轉化為規模小的相似的子問題來解決。在函式實現時,因為解決大問題的方法和解決小問題的方法往往是同乙個方法,所以就產生了函式呼叫它自身的情況。另外這個解決問題的函式必須有明顯的結束條件,這樣就不會產生無限遞迴的情況了。

遞迴的兩個條件

(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 ...