我是Python的新手,所以在一个其他人可能觉得简单的问题上遇到了麻烦。
这个问题的背景是欧拉计划中的第二个问题。该问题实际上要求我们将斐波那契数列中所有不超过4,000,000的偶数项相加。与其它许多在线解决方案不同,我决定通过从闭式公式计算第n个斐波那契项来解决这个问题。暂时假设此函数称为Fibonacci(n)
。
我的目标是循环遍历未知数量的整数,这些整数表示斐波那契集合的索引(即1、2、3、4等),并将每个值插入Fibonacci(n)
。如果结果除以2没有余数,则将该斐波那契数添加到最初设置为0的某些值中。
以下是我目前的代码:
def Fibonacci(n):
return (1/(5**0.5))*((((1+5**0.5)/2)**n)-(((1-5**0.5)/2)**n))
i=0
FibSum = 0
nFib = 0
while (nFib <= 10):
nFib = Fibonacci(i)
if(nFib%2==0):
FibSum += nFib
i += 1
print FibSum
是的,正如您所看到的,我将斐波那契数列限制在10而不是4,000,000;这仅用于测试。
现在,我的问题是:当我运行此代码时,我得到2.0而不是10.0(2和8是应该加在一起的两个斐波那契数)。
为什么?我猜想是因为循环在达到第三个斐波那契数(2)后停止,而没有继续进行。有人发现我的代码有什么问题吗?
如果您有任何进一步的问题,请评论。提前致谢。
while
和if
语句中不需要括号来包含条件。例如while nFib <= 10:
就可以了。 - Some programmer dudefibonacci
。此外,由于花括号的不寻常使用和缺少空格,你的代码有点难以阅读。请阅读PEP 8。 - user5547025