2 回答

TA貢獻1890條經驗 獲得超9個贊
你可以用functools.lru_cache
這個
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))
您可以使用此裝飾器來記憶函數調用,特別是使用此函數,這將保存maxsize最近的調用。
請注意,在這種特殊情況下,由于您的陳述,絕大多數print時間實際上都花在了寫入控制臺上。如果您刪除它(但仍然保留您的T(i,n)調用),您的代碼將幾乎立即完成。

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