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 を超えたときに停止するように関数を変更する必要があります。

もう 1 つの考えられる改善方法は、数値をリストに格納するのではなく、計算中に数値を追加することですが、適切な時点で停止する場合、これは必要ありません。

于 2013-10-13T15:23:36.300 に答える