我已经得到了,我认为是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)))
答案 0 :(得分:3)
问题是如何获得小于4000000的Fibonacci数。您的代码会尝试查找前4000000个Fibonacci值。由于斐波纳契数以指数方式增长,这将达到数字太大而无法适应内存。
当最后一次计算的值超过4000000时,您需要将功能更改为停止。
另一个可能的改进是在计算数字时添加数字,而不是将它们存储在列表中,但如果你在适当的时间停止,则不需要这样做。