これはプロジェクトオイラーの問題2からのものです。私は次の一見無害なコードを書きました。
public class FibonacciEven {
public static void main(String[] stuff) {
long sum = 0;
int i = 0;
while(fib(i) <= 40) {
boolean even = fib(i) % 2 == 0;
if(even) {
sum += fib(i);
}
else {
continue;
}
i++;
}
System.out.println(sum);
}
public static long fib(int n) {
long prev1 = 0;
long prev2 = 1;
for(int i = 0; i < n; i++) {
long savePrev1 = prev1;
prev1 = prev2;
prev2 = savePrev1 + prev2;
}
return prev1;
}
}
フィボナッチ数を計算するためのJavaメソッドがどのようにメモリを大量に消費するかについて読んだことがありますが、ご覧のとおり、制限を40に縮小しましたが、まだ終わりに達していないので、いくつかの構文がひどく間違っています。コードのどの部分がそれを永久に実行させていますか?そして、これらすべてが本当にメソッドの実行に非常に時間がかかるという事実によるものである場合、誰かがより良い方法を提案できますか?
編集:わかりました、今私のコードは次のようになります:
public class FibonacciEven {
public static void main(String[] stuff) {
long sum = 0;
int i = 0;
while(fib(i) <= 40) {
boolean even = fib(i) % 2 == 0;
if(even) {
sum += fib(i);
}
i++;
}
System.out.println(sum);
}
public static long fib(int n) {
long prev1 = 0;
long prev2 = 1;
for(int i = 0; i < n; i++) {
long savePrev1 = prev1;
prev1 = prev2;
prev2 = savePrev1 + prev2;
}
return prev1;
}
}
今回は、フィボナッチ数列の2(インデックス3)を無視します。