-1

斐波那契数列中的每个新项都是通过添加前两项来生成的。从 1 和 2 开始,前 10 个术语将是:

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

通过考虑斐波那契数列中值不超过四百万的项,求偶数项之和。

我的程序打印了 4613731,但它应该是 4613732。问题出在哪里?

def fib(n):
    if n == 0:
        return 1
    elif n == 1:
        return 2
    else:
        return fib(n-1)+fib(n-2)

tot = 0
n = 0
while fib(n) <= 4000000:
    if fib(n) % 2 != 0:
        tot += fib(n)
    n += 1

print(tot, n)
4

2 回答 2

1
if fib(n) % 2 != 0:
    tot += fib(n)

这将检查奇数值,因为偶数模 (%) 2 为 0

另外,您要计算fib(n)三次。可能想为此做点什么。

于 2017-12-26T20:13:07.617 回答
1

感谢您的答复!我忘了'even'是什么意思,很抱歉浪费你的时间! 我还改进了我的代码,

tot = 0
a = 1
b = 1
h = 0

while h <= 4000000:
    if h % 2 == 0:
        tot += h
    a = b
    b = h
    h = a + b

print(tot)
于 2017-12-26T20:26:40.697 回答