这是来自项目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)。
最佳答案
如果even
为false,则您将在不更新i
的情况下得到continuin-因此它将再次循环并再次执行完全相同的工作,因此even
将再次为false,依此类推。
我怀疑您只是想取出else
块。