Jay*_*122 1 python memoization fibonacci
我在Project Euler上的问题2遇到了麻烦.目标是找到Fibonacci序列中偶数值的总和,其值不超过四百万.由于某种原因,我一直得到0作为我的输出.我究竟做错了什么?
total = 0
count = 0
term = 0
fibonacciMemo = {0:0, 1:1}
def main ():
term = fibonacci (count)
while (term <= 4000000):
if (term % 2 == 0):
total += term
count += 1
def fibonacci (n):
if not n in fibonacciMemo:
fibonacciMemo [n] = fibonacci (n - 1) + fibonacci (n - 2)
return fibonacciMemo [n]
print (total)
Run Code Online (Sandbox Code Playgroud)
一些问题:
你永远不会调用这个main函数.您必须显式调用它才能执行它.
变量的赋值term,count,total在main不会写的全局变量.相反,将创建具有相同名称的不同局部变量,并且0即使在main调用之后全局变量仍将具有该值.
解决这个问题的方法之一是增加线路global term, count, total在main.但这是糟糕的设计.更好的是删除全局变量(使它们全局变量main),并main返回值total.然后print(main())会显示结果.
你只调用fibonacci一次main- 你会想把它放在循环中.否则循环将无限运行,因为term永远不会更新.