【发布时间】:2019-09-17 12:11:38
【问题描述】:
我正在学习递归函数中的记忆,并在 Youtube 上偶然发现了一个斐波那契示例。我从来没有见过这个人运行代码,所以也许他写错了。
当我复制代码并尝试运行它时,我首先收到一个错误,因为我声明了没有范围的备忘录,所以我只是将范围设置为输入 + 1(因为我没有使用 0 索引)从而解决了这个问题。但是现在我卡在了错误的返回值上。
def fib(num, memo=[]):
if num == 0:
return 0
elif num == 1 or num == 2:
return 1
elif memo[num] != None:
return memo[num]
else:
memo[num] = fib(num-1, memo) + fib(num-2, memo)
return memo[num]
uInput = int(input("Fibonacci: "))
memo = list(range(uInput + 1))
fibNum = fib(uInput, memo)
print(fibNum)
上面的代码没有抛出错误,只是简单地返回“uInput”值。因此,如果我输入 6,对于第 6 个斐波那契数,程序将返回 6 而不是 8,这是实际的第 6 个数。我不知道为什么会发生这种情况。
当我用谷歌搜索这个问题时,我发现了建议使用字典而不是列表的线程。如果这是唯一的方法,那就太好了。但是,如果有办法让它与列表一起工作,我想了解它是如何完成的,以便我理解为什么会遇到这个问题。
【问题讨论】:
标签: python recursion fibonacci memoization