这是来自项目 Euler,问题 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)。