【问题标题】:Project Euler: Even Fibonacci numbers [closed]欧拉计划:偶数斐波那契数[关闭]
【发布时间】:2017-12-26 20:09:07
【问题描述】:

斐波那契数列中的每个新项都是通过添加前两项来生成的。从 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)

【问题讨论】:

  • 你不是对奇数值求和吗?
  • n 计算fib(n) 三次,保持优化。
  • @Arman Uh... 与他们真正这样做的频率相比,三遍实际上非常好。
  • 你的结果 4613731 很奇怪应该是一个线索......
  • @ubadub 因为他们认为他们是对偶数求和,而偶数之和是偶数。因此,当他们看到奇数和时,他们应该意识到他们不是对偶数求和。

标签: python project fibonacci solution eulers-number


【解决方案1】:
if fib(n) % 2 != 0:
    tot += fib(n)

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

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

【讨论】:

    【解决方案2】:

    感谢您的回复!我忘了'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)
    

    【讨论】:

      猜你喜欢
      • 2013-02-23
      • 1970-01-01
      • 2010-12-07
      • 1970-01-01
      • 2015-07-25
      • 1970-01-01
      • 1970-01-01
      • 2021-12-21
      • 2011-02-04
      相关资源
      最近更新 更多