【发布时间】:2018-03-09 22:56:23
【问题描述】:
下面是Fibonacci Sequence的迭代计算。
def fibonacci(n):
if n < 0:
raise ValueError("invalid index!")
if n==0:
return 0
if n==1:
return 1
f = [0,1]
for i in range(2,n+1):
f.append(f[i-1] + f[i-2])
return f[n]
事实上,列表f 是函数内部的一个局部变量,每次调用fibonacci 函数时都会重新创建和重新填充。
如何重写这段代码 sn-p 以便 Python 在调用时无需重新计算 fibonacci(5) 并且可以在下次调用 fibonacci(5) 或更高版本时使用它?我知道全局变量是一种选择,但最“Pythonic”的方式是什么?
【问题讨论】:
-
global或将可变变量传递给函数。 -
您可能想检查更好的实施方案:technobeans.com/2012/04/16/5-ways-of-fibonacci-in-python
-
你应该查一下memoization。这里有一个例子:stackoverflow.com/a/13865482/104349
-
这有关系吗?我不明白这整个
pythonicreligious bs tbh。如果它解决了您的问题并且是可读且或快速的操作,那不是很好吗?无论如何,是的,它是 pythonic -.- -
@Torxed 全局变量既不是快速的、线程安全的,也不是 Python 的(这仅仅意味着以最直接和前瞻性的思维方式使用该语言,而不是像你习惯的那样语言)。有很多人喜欢修改代码提交,而不考虑可维护性或可靠性,所以无论如何都可以随意这样做;-)
标签: python scope fibonacci memoization