0

我有,我认为是Project Euler问题 2的有效解决方案(在斐波那契数列中找到所有偶数,最多 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)))
4

1 回答 1

3

问题在于获取小于 4000000 的斐波那契数。您的代码尝试查找前 4000000 个斐波那契值。由于斐波那契数呈指数增长,这将达到太大而无法放入内存的数字。

当最后计算的值超过 4000000 时,您需要更改函数以停止。

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

于 2013-10-13T15:23:36.300 回答