项目Euler 2 python3

时间:2013-10-13 15:03:41

标签: python

我已经得到了,我认为是Project Euler problem 2的有效解决方案(在Fibonacci序列中找到所有偶数,最多4,000,000)。这适用于较低的数字,但是当我用4,000,000运行它时会崩溃。我知道这在计算上很困难,但是它不应该花费很长时间来计算而不是崩溃吗?或者我的代码中是否存在问题?

import functools

def fib(limit):
    sequence = []
    for i in range(limit):
    if(i < 3):
        sequence.append(i)
    else:
        sequence.append(sequence[i-1] + sequence[i-2])
    return sequence

def add_even(x, y):
    if(y % 2 == 0):
        return x + y
    return x + 0

print(functools.reduce(add_even,fib(4000000)))

1 个答案:

答案 0 :(得分:3)

问题是如何获得小于4000000的Fibonacci数。您的代码会尝试查找前4000000个Fibonacci值。由于斐波纳契数以指数方式增长,这将达到数字太大而无法适应内存。

当最后一次计算的值超过4000000时,您需要将功能更改为停止。

另一个可能的改进是在计算数字时添加数字,而不是将它们存储在列表中,但如果你在适当的时间停止,则不需要这样做。