我是 Python 的新手,这就是为什么我在解决其他人可能会觉得容易的问题时遇到了麻烦。
此问题的背景:Euler Project,问题 2。此问题本质上要求我们将斐波那契数列中的所有偶数项相加,使得每个项都在 4,000,000 以下。我决定通过从封闭公式计算第 n 个斐波那契项来解决与许多在线解决方案略有不同的问题。现在,假设此函数称为 Fibonacci(n).
我基本上想做的是遍历未知数量的整数,这些整数表示斐波那契集的索引(即 1、2、3、4 等),并将每个值插入 Fibonacci(n)。
如果结果除以 2 没有余数,则将此 Fibonacci 数添加到某个初始设置为 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) 后停止并且不会继续超出该数。有人看到我的代码有问题吗?
如有任何问题,请发表评论。提前致谢。
最佳答案
Gal Dreiman 提供的解决方案很好,但是用 in 函数转换更好,下面是您修改后的代码:
def Fibonacci(n):
return int((1/(5**0.5))*((((1+5**0.5)/2)**n)-(((1-5**0.5)/2)**n)))
关于Python:在 "If"循环中嵌套 "while"语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38069471/