Memoization python

Vip*_*pul 1 python recursion memoization

什么是memoization,它是如何在python中使用的?以及它与递归的不同之处.在某个地方,我遇到了一个声明,为了减少递归程序或函数的执行时间,我们应该使用memoization而不是递归.例如:

def factorial( n ):
   if n <1:   # base case
       return 1
   else:
       return n * factorial( n - 1 )  # recursive call
Run Code Online (Sandbox Code Playgroud)

如果这是计算阶乘的递归函数,那么在使用memoization时会有什么变化?

小智 9

记忆是存储结果以供将来使用.Python的functools模块包含一个简单的装饰器lru_cache,可以为您处理.所以对于你的例子:

@lru_cache(maxsize=None)
def factorial( n ):
   ...
Run Code Online (Sandbox Code Playgroud)

将存储阶乘的每个结果,包括其递归调用.这意味着下次调用阶乘时,您将无法执行完整计算,而是在您到达之前调用过的呼叫时立即停止.此时,结果将从先前存储的结果中提取.

这些答案也可能对您有用: 什么是memoization以及如何在Python中使用它?