Skip to main content
 首页 » 编程设计

python之欧拉计划 #2之Python v3.2.3

2025年05月04日12jiqing9006

我在使用 problem 2 时遇到了问题在欧拉计划上。目标是求斐波那契数列中不超过四百万的偶数项之和。出于某种原因,我一直得到 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) 

请您参考如下方法:

一些问题:

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

  • main中对变量term、count、total的赋值不会写入到全局变量。相反,将创建具有相同名称的不同局部变量,即使在调用 main 之后,全局变量仍将具有值 0。

    解决此问题的一种方法是在 main 中添加行 global term, count, total。但这是糟糕的设计。更好的方法是删除全局变量(使它们都在 main 本地),并让 main 返回 total 的值。然后 print(main()) 将显示结果。

  • 您只需在 main 中调用一次 fibonacci - 您需要将其放入循环中。否则循环将无限运行,因为 term 永远不会更新。