Eulerproject 2斐波那契计算

时间:2018-07-02 13:39:55

标签: python

对于Python来说,我是一个新手,并通过遵循一些指南并同时做一些小项目来尝试学习。

我目前正在尝试就斐波那契数进行第二个Eulerproject问题。内容如下:

  

斐波那契数列中的每个新术语都是通过将前两个术语相加而生成的。从1和2开始,前10个术语将是:

     

1、2、3、5、8、13、21、34、55、89,...

     

通过考虑斐波那契数列中值不超过400万的项,找到偶值项的总和。

这是我试图解决的问题

Fib = [1, 2, 3]
answer_list = []

x = Fib[-1]
y = Fib[-2]

while x <= 4000000:
  z = x + y
  Fib.append(z)

for number in Fib:
  if number % 2 == 0:
    answer_list.append(number)

answer = sum(answer_list)

print(answer)

当我尝试使用此代码时,没有得到回应。谁能在不给我实际答案的情况下,向我指出如何改进的正确方向?

预先感谢和亲切问候。

1 个答案:

答案 0 :(得分:0)

更简单,更快捷的方法来完成此操作:

fib = [1, 1]  # something to start with
while fib[-1] < 4000000 :
    fib.append( fib[-1] + fib[-2] )
print sum( i for i in fib if i&1 == 0 )

输出:

4613732

如果上限远高于4e6,则更好的方法是避免创建较大的列表,而仅使用两个变量previouscurrent来生成斐波那契数,而另外一个变量用于保持偶数元素的总和。类似于:

>>> total = 0
>>> current = previous = 1
>>> while current < 4000000 :
...     if current & 1 == 0 : total += current
...     previous, current = current, previous + current
... 
>>> total
4613732

警告的一个额外词,即4e6上的最后一个数字是5702887-一个奇数,因此我不在乎将其从第一个代码示例的列表中删除。但是,如果要格外小心,请在汇总元素之前添加fib.pop()