python之遞歸棧溢出優化方式

因爲棧的大小不是無限的,因此遞歸調用的次數過多便會致使棧的溢出,一般解決棧溢出的方法python

是尾遞歸優化,尾遞歸跟循環的效果同樣,它在函數返回時調用函數自己,並在return語句不能包函數

含表達式。編譯器和解釋器就能夠對尾遞歸進行優化,遞歸自己不管調用多少次都只佔用一個棧幀優化

,從而避免棧的溢出。遞歸

代碼實現:編譯器

#!usr/bin/python3it

# -*- coding:UTF-8 -*-編譯

def fact(m):coding

    return fact_item(n, 1)循環

def fact_item(num, p):方法

    if num == 1:

        return p

    return fact_item(num - 1, num * p)

print(fact(5))

代碼的調用過程:

=====> fact_item(5, 1)

=====> fact_item(4, 5)

=====> fact_item(3, 20)

=====> fact_item(2, 60)

=====> fact_item(1, 120)

>>> 120

從結果就能夠看到,調用尾遞歸的時候若是作出優化後,棧就不會增加,因此無論調用多少次都不會

致使棧溢出。

相關文章
相關標籤/搜索