您好,我一直在尝试做与项目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)
答案 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