我在欧拉项目中遇到了problem 2的麻烦。目标是找到Fibonacci序列中值不超过400万的偶数值项的总和。由于某些原因,我一直得到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)
发布于 2012-04-20 00:28:15
这是因为你从来没有调用main或者fibonacci。你只需分配
total = 0
count = 0
term = 0
fibonacciMemo = {0:0, 1:1}
然后
print (total)
如果要执行main
,则必须显式调用它,例如,将main()
放在print (total)
之前
您的代码中还有另一个问题。您尝试从函数内部递增全局变量total
。这是行不通的,除非你给这个函数声明了global
。在第一次使用total之前,可以通过将global total
放入函数中来完成此操作。count和term也有同样的问题。而且看起来你的控制流程也有问题。这不会生成正确的答案。
发布于 2012-04-20 00:34:39
将以下代码行添加到脚本的底部:
if __name__ == "__main__":
main()
当您将该文件作为Python脚本运行时,它将调用main()
。
顺便说一句,Project Euler问题有一个更好的解决方案,你可以直接生成偶数斐波那契项而不是过滤。现在就养成寻找聪明解决方案的习惯,否则当问题变得具有挑战性时,你会碰壁。
https://stackoverflow.com/questions/10232465
复制相似问题