【问题标题】:Why there is no difference between passing in the memo dict and not passing it?为什么memo dict传入和不传没有区别?
【发布时间】:2023-02-13 19:41:27
【问题描述】:

所以我有这个斐波那契数列的记忆算法,我遇到了一些奇怪的事情,如果我通过备忘录听写第 4 行,或者如果我不这样做,我想了解为什么?不是备忘录应该在以后的递归调用中为空?

这是没有通过的代码备忘录第 4 行:

def fib(n , memo = {}):
    if(n<=2): return 1
    if(n in memo): return memo[n]
    memo[n] = fib(n-1) + fib(n-2)
    return memo[n]

这是我通过它的时候:

def fib(n , memo = {}):
    if(n<=2): return 1
    if(n in memo): return memo[n]
    memo[n] = fib(n-1 , memo) + fib(n-2 , memo)
    return memo[n]

您可以尝试一下,输出没有区别。

【问题讨论】:

标签: python dynamic-programming fibonacci memoization


【解决方案1】:

memo会被初始化为默认值(空字典)恰好一次.之后,默认值memo是之前启动的实例,所以在函数内部,你一直在修改dict的同一个实例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-25
    • 1970-01-01
    • 2011-04-18
    • 2011-03-23
    • 2016-10-23
    • 2017-01-22
    相关资源
    最近更新 更多