你好,我一直在尝试做与欧拉项目问题 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)
您将跳过序列中的前两个奇数并将第一个大于 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
我是一名优秀的程序员,十分优秀!