【发布时间】:2018-12-12 10:03:52
【问题描述】:
@functools.lru_cache 的文档提供了一个使用缓存计算斐波那契数以实现动态编程技术的示例:
@lru_cache(maxsize=None)
def fib(n):
if n < 2:
return n
return fib(n-1) + fib(n-2)
我已经看到这种方法用于解决各种编程难题。它是否具有与“标准”迭代动态编程方法相同的时间/空间复杂度,例如:
def fib(n):
if n < 2:
return n
dp = [0]*(n+1)
dp[1] = 1
for i in range(2 , n+1):
dp[i] = dp[i-1] + dp[i-2]
return dp[n]
另外,使用递归方法有什么缺点吗?
【问题讨论】:
标签: python recursion dynamic-programming memoization