一.遞歸(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)缺點:不夠簡潔,容易混淆