?
- 遞回函式
在函式內部呼叫自身本身
計算階乘:
def fact(n): if n == 1: return 1 return n * fact(n - 1)![]()
注意:使用遞回函式需要防止堆疊溢位,
在計算機中,函式呼叫是通過堆疊(stack)實作,每當進入一個函式呼叫,堆疊就會加一層堆疊幀,每當函式回傳,堆疊就會減少一層堆疊幀,由于堆疊的大小不是無限的,所以遞回呼叫的次數過多會導致堆疊溢位,
解決方法:尾遞回優化,
尾遞回: 在函式回傳時,呼叫自身本身,且return陳述句不能包含運算式,
計算階乘:
def fact(n): return fact_iter(n, 1) def fact_iter(num, product): if num == 1: return product return fact_iter(num - 1, num * product)![]()
fact(n)函式,由于return引入乘法運算式所以不是尾遞回
fact_iter(num,product)函式,僅回傳遞回函式本身
尾遞回呼叫如果做了優化,堆疊不會增長,無論多少次呼叫也不會導致堆疊溢位,
python標準的解釋器沒有針對尾遞回做優化,任何遞回函式都存在堆疊溢位的問題
?轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/545555.html
標籤:其他
上一篇:docker實戰
