2013-10-13 102 views
0

我有,我認爲是項目歐拉problem 2有效的解決方案(查找斐波那契序列中的所有偶數高達4,000,000)。這適用於較低的數字,但當我用400萬運行時會崩潰。我明白這在計算上很困難,但是不應該花很長時間來計算而不是崩潰?或者在我的代碼中存在問題?項目歐拉2 python3

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

你必須使用longs還是內置到python? – sihrc

+0

請寄出你得到的回溯。 – interjay

+0

也許你沒有內存? – sihrc

回答

3

問題是關於獲取小於4000000的斐波那契數。您的代碼試圖找到第一個4000000斐波那契數值。由於斐波納契數字以指數形式增長,因此數字太大而不適合記憶。

你需要改變你的功能停止當最後一個計算值超過400萬

另一個可能的改進是爲你計算他們,而不是將它們存儲在列表中添加號碼,但這個韓元如果你在適當的時間停下來,那就沒有必要了。

+0

這是問題,但我認爲你太悲觀了。即使fib(4000000)只有836000個數字,所以數字永遠不會太大以至於不能存儲在內存中(因爲您只需要存儲一些數字)。如果這是問題,無論如何,你指出它不是。 :^) – DSM

+0

謝謝,我誤解了這個問題。我得到了答案。然而,我仍然不明白爲什麼我的程序崩潰,試圖計算甚至前4000000數字的總和。 –