所有偶数Fibonacci数字代码的总和永远不会停止 - Java

Blu*_*ire 0 java fibonacci while-loop

这是来自项目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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我确实读过关于如何计算Fibonacci数字的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;
    }
}
Run Code Online (Sandbox Code Playgroud)

这次它忽略斐波纳契数列中的2(索引3).

Jon*_*eet 5

如果even是假,你最终会继续而不更新i- 所以它会再次循环并再次完成相同的工作,所以even将再次为假,等等......

我怀疑你只想拿走这个else街区.