帶冗余計算的分岔遞歸計算
def T(n):如果n<;=0:返回1否則:返回T(n-1)+(n-1)*T(n-2)打印T(4)I需要一種有效的方法來打印使用上述遞歸關(guān)系生成的函數(shù)T(n)的輸出。有沒有辦
解答動態(tài)
如果你不能使用functools.cache或者functools.lru\u緩存如果你不明白或者不想使用解析者,如另一個答案所示,這里是一種低技術(shù)的記憶方法。請注意,functools方法更簡單、更健壯,等等。但是如果您不擔(dān)心所有這些,只需要比當(dāng)前方法快得多的簡單代碼,這就可以了。
def T(n):if n not in T.cache:if n<;=0:T.cache[n]=1 else:T.cache[n]=T(n-1)+(n-1)*T(n-2)return T.cache[n]#初始化cache.T.cache={}還有一個選項是根本不遞歸,而是計算序列,直到得到所需的項。這不僅避免了原始算法的指數(shù)復(fù)雜度,還避免了記憶化的至少線性(以計數(shù)值為單位)內(nèi)存復(fù)雜度。(遞歸/記憶體化還可能遇到特定于實現(xiàn)的問題,例如遞歸深度錯誤或內(nèi)存錯誤,這與下面的代碼無關(guān)。)
def T(n):如果n<;=0:返回1#將a,b設(shè)置為T(-1),T(0)a,b=1,1表示范圍(n)中的i:#將a,b從T(i-1),T(i)更改為T(i),T(i+1)a,b=b,b+i*a#i=n-1將b設(shè)置為T(n)返回b您應(yīng)該使用iflt;=0:返回1,否則:返回T(n-1)+(n-1)*T(n-2)
- End
免責(zé)聲明:
本頁內(nèi)容僅代表作者本人意見,若因此產(chǎn)生任何糾紛由作者本人負(fù)責(zé),概與琴島網(wǎng)公司無關(guān)。本頁內(nèi)容僅供參考,請您根據(jù)自身實際情況謹(jǐn)慎操作。尤其涉及您或第三方利益等事項,請咨詢專業(yè)人士處理。