は私のコードです:私は私がしなければならないと思う何再帰的なフィボナッチシーケンスが4,000,000を超える値を生成しないようにするにはどうすればよいですか?ここ
public class EvenFibonacciNumbers {
//0 1 1 2 3 5 8 13 21 34
public static void main(String args[]){
int index = 0;
while (true){
System.out.println(fibonacci(index));
index++;
}
}
public static long fibonacci(int i){ //i is our index value
//We will do this by recursion.
//We know that if our index is 0, it will return 0.
if(i == 0) return 0;
//We know that if our index is 1 or 2, it will return 1.
if (i <= 2) return 1;
//Now we need to determine what would happen if our index is greater
//than 2.
long fibTerm = fibonacci(i-1)+fibonacci(i-2);
return fibTerm;
}
}
は、私がこれを行うとき、私はそれが変数を見つけることができないことを私に言って、エラーを取得し、しかし
while (fibTerm<4000000)
に変更していますfibTerm。だから、これはこれを行うには間違った方法でしょうか?私は正確にはわからない。
次のうちのいずれか:**できません。再帰的なフィボナッチ計算機は 'O(n^2)'のランタイムを持ちます。これは大きな 'n'に対して計算全体を極端に遅くします。この問題は、線形に簡単に解決できます。加えて、線形アプローチは、かなり多くの上限を導入することを単純化するだろう。 – Paul
@Paul反復はもっと現実的なアプローチでしょうか? –
はい。メモリの必要量ははるかに少なく、再帰的なメソッドコールもありません。終了するのに必要な時間の点で効率的な実行方法であり、コードの理解には影響しません。 – Paul