遞歸和迭代

一.遞歸(Recursion)數據結構

1.遞歸:以類似的方式重複自身的過程函數

2.遞歸在程序中表現爲:在函數的定義中直接或間接調用函數自身blog

3.遞歸和循環:遞歸

(1)遞歸是有去(遞去)有回(歸來),由於存在終止條件,好比你打開一扇門還有一扇門,不斷打開,最終你會碰到一面牆,而後返回ci

(2)循環是有去無回,但能夠設置終止條件,好比你打開一扇門還有一扇門,不斷打開,還有門,沒有終點數學

4.遞歸的遞去和歸來:it

(1)遞歸的遞去:原問題必須能夠分解成若干個子問題,並且子問題須與原始問題爲一樣的事(類似),且規模更小io

(2)遞歸的歸來:子問題的演化必須有一個明確的終點,不然可能致使無限遞歸(無終止條件的循環),也就是說不能無限制地調用自己,須有個出口,化簡爲非遞歸情況處理class

5.遞歸在函數中的具體形式:效率

(1)必須明確終止條件,並給出終止時的處理

(2)必須有間接或直接調用自身解決小規模問題的步驟

def recursion(大規模問題):

  if end_condition:                                  #終止條件

    end                                               #終止的處理

  else:

    recursion(小規模子問題)    #調用自身

6.遞歸的應用:

(1)問題的定義是按遞歸定義的(Fibonacci函數,階乘,…);

(2) 問題的解法是遞歸的(有些問題只能使用遞歸方法來解決,例如,漢諾塔問題,…);

(3) 數據結構是遞歸的(鏈表、樹等的操做,包括樹的遍歷,樹的深度,…)

7.遞歸的優缺點

(1)遞歸的優勢:簡潔,容易處理問題,代碼可讀性高

(2)時間和空間消耗大

8.遞歸式求解的基本方法

(1)代換法

1.猜對答案

2.用數學概括法求解常係數,並驗證遞歸式解的正確性

例:已知:T(n)= O(n lgn)

則計算

(2)遞歸樹

(3)主方法:不是全部狀況都包括

 

二.迭代

1.迭代:是一種爲了逼近所需目標或結果,不斷用變量的舊值遞推新值的過程

2.迭代在程序中的表現:函數不斷調用原函數的返回值,

3.迭代與循環,迭代和遞歸同樣,也是循環的一種

(1)循環:參與運算的變量同時是保存結果的變量

(2)迭代:當前保存的結果做爲下一次循環計算的初始值。迭代則使用計數器結束循環。

4.迭代和遞歸

(1)迭代:函數內某段代碼實現循環,函數調用時使用前一次循環的返回值做爲初始值,A調用B,使5用計數器結束循環

(2)遞歸:重複調用自身實現循環,A調用A,設置結束條件

(3)遞歸中必定有迭代,可是迭代中不必定有遞歸,大部分能夠相互轉換.能用迭代的不用遞歸,

5.迭代在程序中的表示:

(1)必須設置計數器,能夠經過計數設置或條件設置,不然會一直迭代

(2)必須有返回值能夠做爲再次迭代的初值

def iteration(A):

  return B

C

 

for i in range(n):

  C=interation(C)

6.迭代的優缺點

(1)優勢:代碼效率高,時間空間消耗比遞歸小

(2)缺點:不夠簡潔,容易混淆

相關文章
相關標籤/搜索