小明帯了一筆錢出去旅遊,出門的第一天花了ー半,加10元,往後的每天都花之前一天剩下的半,加10元,一般遞迴:第八天的早上時候小明只剩下了10元錢,寫段**,計算小明出去的時候帶了多少錢?
每一級遞迴,都會呼叫函式本身,會建立新的棧,隨著遞迴深度的增加,建立的棧會越來越多,最終會造成爆棧。
def money(day):尾遞迴:if day == 8:
return 10
else:
money_new = (money(day + 1) + 10) * 2
return money_new
基於函式的尾呼叫,每一級呼叫直接返回函式的返回值更新呼叫棧,而不是建立新的呼叫棧,類似迭代的實現,
時間和空間上均優化了一般遞迴。
def money_02(day, total=10):if day == 8:
return total
else:
money_new = money_02(day + 1, (total + 10) * 2)
return money_new
python遞迴 Python 與尾遞迴優化
有很多時候,使用遞迴的方式寫 要比迭代更直觀一些,以下面的階乘為例 def factorial n if n 0 return 1 return factorial n 1 n 但是這個函式呼叫,如果展開,會變成如下的形式 factorial 4 factorial 3 4 factorial 2 ...
遞迴與尾遞迴
1 遞迴 關於遞迴的概念,我們都不陌生。簡單的來說遞迴就是乙個函式直接或間接地呼叫自身,是為直接或間接遞迴。一般來說,遞迴需要有邊界條件 遞迴前進段和遞迴返回段。當邊界條件不滿足時,遞迴前進 當邊界條件滿足時,遞迴返回。用遞迴需要注意以下兩點 1 遞迴就是在過程或函式裡呼叫自身。2 在使用遞迴策略時...
遞迴與尾遞迴
1 遞迴 簡單的來說遞迴就是乙個函式直接或間接地呼叫自身,是為直接或間接遞迴。一般來說,遞迴需要有邊界條件 遞迴前進段和遞迴返回段。當邊界條件不滿足時,遞迴前進 當邊界條件滿足時,遞迴返回。用遞迴需要注意以下兩點 1 遞迴就是在過程或函式裡呼叫自身。2 在使用遞迴策略時,必須有乙個明確的遞迴結束條件...