我想知道是否有人可以幫助我將此代碼重寫為非遞回的,以便它可以計算更高的數字,我當前的代碼如下所示:
def T(n):
if n < 3:
return n
return T(n - 1) 2 * T(n - 2) - T(n - 3)
該函式是為算術目的而設計的,其中 T(0) = 0, T(1) = 1, T(2) = 2, T(3) = 4, T(5) = 7 等...
例如,我希望能夠計算高達 T(1000) 的值,我不知道是否有一種簡單的方法來重寫代碼,或者它是否只是計算值的一種情況?任何幫助將不勝感激,我目前收到錯誤“超出最大遞回深度”
uj5u.com熱心網友回復:
使用“滾動”方法來跟蹤最后三個結果,并且在添加新結果時,還會踢出最舊的結果:
def T(n):
if n < 3:
return n
a, b, c = 0, 1, 2
for i in range(2, n):
a, b, c = b, c, c 2*b - a
return c
uj5u.com熱心網友回復:
有一個用于快取函式值的裝飾器,因此您無需修改??即可使用您的函式:
from functools import lru_cache
@lru_cache(maxsize=None)
def T(n):
if n < 3:
return n
return T(n - 1) 2 * T(n - 2) - T(n - 3)
從 python 3.9 開始:
from functools import cache
@cache
然后你可以運行:
T(1000)
并且無需任何修改就能以極快的速度完成執行。
uj5u.com熱心網友回復:
最好使用動態規劃。
def t(n):
if n <3:
return n
temp = [0] * (n 1)
temp[1], temp [2] = 1,2
for i in range(3,n 1,1):
temp[i] = temp[i - 1] 2 * temp[i - 2] - temp[i - 3]
return temp[n]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/449667.html
