我正在处理这个问题,看起来我有一个可行的解决方案,但是我很难理解它的行为。
以下是我所拥有的。
#!/usr/bin/python
def even_fib_sums(limit):
number = 1
last = 0
before_last = 0
total = 0
for counter in range (0,limit):
before_last = last
last = number
number = before_last + last
if not number % 2:
total += number
yield total
print sum(even_fib_sums(4000000))
我刚开始学编程,但我认为这种方法并不是很有效,因为需要遍历范围内的所有4000000个数字。
如果我使用相同的方法生成斐波那契数列,直到5,结果如下所示。
def generate_fib(limit):
number = 1
last = 0
before_last = 0
total = 0
for counter in range (0,limit):
before_last = last
last = number
number = before_last + last
print number
generate_fib(5)
结果:1、2、3、5、8
在这些结果中,只有2和8 % 2 == 0。 如果使用上面的第一个片段,总和应该是10,但我返回的是12。为什么呢?