【发布时间】:2018-11-09 00:11:36
【问题描述】:
以下代码是使用记忆化的斐波那契数列。但我不明白算法中的执行顺序。如果我们做dynamic_fib(4),它将计算dynamic_fib(3) + dynamic_fib(2)。左侧先调用,然后计算dynamic_fib(2) + dynamic_fib(1)。但是在计算 dynamic_fib(3) 时,当我们没有像 C 中的 &dic[n] 那样将结果保存到字典的内存地址时,dynamic_fib(2) 的缓存答案是如何向上传播以被重用的。
我认为应该发生的是,dynamic_fib(2) 的答案已经消失,因为它只存在于那个堆栈中。所以在计算dynamic_fib(4)的时候还要重新计算dynamic_fib(2)
我错过了什么吗?
def dynamic_fib(n):
return fibonacci(n, {})
def fibonacci(n, dic):
if n == 0 or n == 1:
return n
if not dic.get(n, False):
dic[n] = fibonacci(n-1, dic) + fibonacci(n-2, dic)
return dic[n]
【问题讨论】:
标签: dynamic-programming fibonacci memoization