求所有奇数斐波那契数之和小于200万

2024-10-01 00:27:53 发布

您现在位置:Python中文网/ 问答频道 /正文

你好,我一直在尝试做与欧拉项目问题2(即所有小于4000000的偶数斐波那契数之和)相反的事情。我试图打印所有奇数斐波那契数的总和小于2000000,但我似乎无法得到正确的答案。这是我目前掌握的密码

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)

Tags: 项目答案密码forplace事情sum奇数
1条回答
网友
1楼 · 发布于 2024-10-01 00:27:53

您跳过序列中的前两个奇数,并在求和中包含第一个大于2000000的奇数,因为在while循环检查值是否小于您的限制之前,您将计算下一个fibonacci数并增加总数。您可以通过初始化变量以包含序列的开头,并将序列中下一个数字的计算移到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

相关问题 更多 >