找出所有小于200万的斐波那契奇数之和

时间:2019-10-24 22:57:12

标签: python python-3.x

您好,我一直在尝试做与项目Euler问题2相反的问题(问题2是小于4,000,000的所有偶数斐波纳契数之和)。我正在尝试打印所有小于2,000,000的奇数斐波纳契数的总和,但是我似乎无法获得正确的答案。这是我到目前为止的代码

fib1 = 1
fib2 = 2
fibholder = 0 #place holder for the new value
Sum = 0
while fibholder<2000000:
    fibholder = fib1 + fib2
    if fibholder%2==1:
        Sum+=fibholder
    fib1 = fib2
    fib2 = fibholder
print(Sum)

1 个答案:

答案 0 :(得分:3)

您将跳过序列中的前两个奇数,并且将总和中大于2,000,000的第一个奇数包括在内,因为您需要计算下一个斐波那契数,并在while循环检查该值是否小于你的极限。您可以通过初始化变量以包括序列的开头,并将对序列中下一个数字的计算移至while循环的结尾来纠正现有方法。

total = 1
fib1 = 0
fib2 = 1
fibholder = fib1 + fib2
while fibholder < 2000000:
    if fibholder % 2:
        total += fibholder
    fib1 = fib2
    fib2 = fibholder
    fibholder = fib1 + fib2

print(total)
# 2435423

也就是说,如果仅生成奇数斐波那契数然后处理总和,则逻辑可能更容易遵循。

def odd_fibonacci(limit):
    a, b = 0, 1    
    while a < limit:
        if a % 2:
            yield a

        a, b = b, a + b

x = sum(n for n in odd_fibonacci(2000000))
print(x)
# 2435423