基線條件:函式不再呼叫自身,避免死迴圈【即限制條件】
遞迴條件:函式呼叫自身
執行函式中途呼叫另乙個函式時,當前函式暫停並處於未完成狀態
棧:先進後出【裝箱,最晚放進來的最早拿出去】
使用方便,但儲存詳盡資訊可能占用大量記憶體,每次函式呼叫都需占用記憶體,當n越大,程式執行效率越低。
解決:1迴圈 2尾遞迴
例:階乘
遞迴:建新棧
尾遞迴:不建新棧,直接覆蓋,占用恒量記憶體,大大節省棧空間,提公升執行效率
#遞迴
defrec
(n):
if n ==1:
return n
else
:return n + rec(n -1)
#尾遞迴
deftailrec
(n, total =1)
:if n ==1:
return total
else
:return tailrec(n -
1, total * n)
#迭代total =
1for i in
range(2
, n)
: total = total * i
Python3 資料結構之遞迴
遞迴 def fact x if x 1 return 1 else return x fact x 1 tail recursion 尾遞迴 def tail recusion x,total 1 if x 1 return total else return tail recusion x 1,...
資料 結構 遞迴
遞迴不一定非要像斐波拉契數列一樣在return中呼叫函式 遞迴的結束條件就是初始條件值 通常的方法將遞迴呼叫放在if語句中 n!通過遞迴實現 常用方法還是通過while實現 def jiecheng n if n 0 return 1 else sum n jiecheng n 1 右邊只有階乘表示...
資料結構 遞迴
所謂遞迴,就是在乙個函式,過程,或者資料結構的內部,又直接或間接出現定義本身的應用。在以下三種情況中,常常使用遞迴。比如階乘函式,我們能夠將其分解成幾個小問題來求解,比如求5!我們可以先求4!想求4!先求3!這樣一步步使問題簡化的方法,稱之為分治法。採取分治法求解,需要滿足下面三個條件 1.能夠將乙...