尾遞迴 - 杜絕記憶體洩漏溢位爆棧

hackxiaoya發表於2019-07-01

Python作為一枚上手快的語言來說真的很便利,但是隨著我們越來越熟悉它了,我們會開發很多奇奇怪怪的東西;
然而我就是醬紫,所以涉及到了一個遞迴的問題,可是資料量比較大,層次較深,小機器記憶體完全不夠用,就會出現遞迴的時候出現記憶體不足,導致程式中斷了,我檢視日誌發現,是系統把程式強制關閉了,就是記憶體不足了,爆棧;
所以我們現在說一下這個遞迴的優化 -- 尾遞迴;
其實就是把已經計算好的結果更新一下,而不需要從新建立棧;

# 例子程式碼
def tail_recursion(n, total=0):
    if n == 0:
        return total
    else:
        return tail_recursion(n-1, total+n)
# 執行結果:
tail_recursion(5)
tail_recursion(4, 5)
tail_recursion(3, 9)
tail_recursion(2, 12)
tail_recursion(1, 14)
tail_recursion(0, 15)
15

相關文章