我在這里有這個尾遞回函式:
def fib(n, sum):
if n < 1:
return sum
else:
return fib(n-1, sum+n)
c = 998
print(fib(c, 0))
它可以作業到n = 997,然后它就會中斷并且吐出“比較時超出的最大遞回深度”RuntimeError.這只是一個堆疊溢位?有辦法解決它嗎?
uj5u.com熱心網友回復:
這是一個防止堆疊溢位的防范,是的. Python(或者更確切地說,CPython實作)不優化尾遞回,并且無限制的遞回導致堆疊溢位.您可以使用sys.getrecursionlimit檢查遞回限制并使用sys.setrecursionlimit更改遞回限制,但這樣做很危險 – 標準限制有點保守,但Python堆疊框架可能非常大.Python不是一種函式式語言,尾遞回不是一種特別有效的技術.如果可能的話,迭代地重寫演算法通常是更好的主意.
uj5u.com熱心網友回復:
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/172479.html
標籤:其他技術討論專區
