2 回答

TA貢獻(xiàn)1890條經(jīng)驗(yàn) 獲得超9個(gè)贊
你可以用functools.lru_cache
這個(gè)
from functools import lru_cache
@lru_cache(maxsize=32)
def T(n,k):
? ? q = 0
? ? if n == 0 and k == 0:
? ? ? ? return(1)
? ? ? ? q = 1
? ? if k>n or n<0:
? ? ? ? return(0)
? ? ? ? q = 1
? ? if q != 1:
? ? ? ? return(T(n-1,k-1)+n*T(n-1,k))
您可以使用此裝飾器來(lái)記憶函數(shù)調(diào)用,特別是使用此函數(shù),這將保存maxsize最近的調(diào)用。
請(qǐng)注意,在這種特殊情況下,由于您的陳述,絕大多數(shù)print時(shí)間實(shí)際上都花在了寫入控制臺(tái)上。如果您刪除它(但仍然保留您的T(i,n)調(diào)用),您的代碼將幾乎立即完成。

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超5個(gè)贊
您可以輕松擴(kuò)展mem裝飾器以使用可變*args參數(shù),并在memory. 這也適用于**kwargs,但您必須將它們轉(zhuǎn)換為可哈希類型,frozenset例如tuples。當(dāng)然,為此,所有參數(shù)都必須是可散列的。
def mem(f):
memory = {}
def inner_function(*args):
if args not in memory:
memory[args] = f(*args)
return memory[args]
return inner_function
用你的T功能測(cè)試過(guò),工作正常。然而,在實(shí)踐中,您可能仍然想使用functools.lru_cache.
添加回答
舉報(bào)