gpt4 book ai didi

java - 所有偶数斐波那契数之和代码永远不会停止 - Java

转载 作者:行者123 更新时间:2023-12-01 19:03:41 25 4
gpt4 key购买 nike

这是来自 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 - 因此它将再次循环并再次执行完全相同的工作,因此 even 将再次为 false,等等...

我怀疑你只是想取出else block 。

关于java - 所有偶数斐波那契数之和代码永远不会停止 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11145207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com