【发布时间】:2019-01-08 19:26:35
【问题描述】:
所以我正在阅读这篇优秀的 intro 到动态编程,我正在尝试破译这个 python 代码(斐波那契数的 DP 方法)。我主要用 C/C# 编写代码,所以对我来说理解 Python 有点困难。 所以这是代码:
def fibonacciVal(n):
memo = [0] * (n+1)
memo[0], memo[1] = 0, 1
for i in range(2, n+1):
memo[i] = memo[i-1] + memo[i-2]
return memo[n]
所以,我想了解的位是:
memo = [0] * (n+1) : 我知道这是一个数组,但是这里的值是如何存储的,它是如何初始化的?
for i in range(2, n+1): : 为什么循环到 n+1,不应该只循环到 n 吗?
就是这样。我正在尝试自己破译这一点,让有 python 经验的人在这里帮助我会有所帮助。
谢谢!
【问题讨论】:
-
这是斐波那契的记忆版本,因此它不会重新计算已计算的值。
-
range()的第二个参数是何时停止。 -
在您尝试了解动态编程之前,您需要了解实现它的工具。请在此处发布之前查看 Python 基础知识:初始化列表和
range迭代器。 -
您可以通过阅读文档在 10 分钟内弄清楚所有这些,通过在调试器中单步执行 5 分钟,或者通过玩 repl 60 秒来解决所有这些问题。如果您不知道其中任何一个,那好吧,但现在您知道了,下次再做。
-
memo初始化可以缩短为memo = [0, 1] + [0] * (n-2)
标签: python dynamic-programming fibonacci