项目Euler#2 - Python v3.2.3

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)

int*_*jay 6

一些问题:

  • 你永远不会调用这个main函数.您必须显式调用它才能执行它.

  • 变量的赋值term,count,totalmain不会写的全局变量.相反,将创建具有相同名称的不同局部变量,并且0即使在main调用之后全局变量仍将具有该值.

    解决这个问题的方法之一是增加线路global term, count, totalmain.但这是糟糕的设计.更好的是删除全局变量(使它们全局变量main),并main返回值total.然后print(main())会显示结果.

  • 你只调用fibonacci一次main- 你会想把它放在循环中.否则循环将无限运行,因为term永远不会更新.