所有偶数斐波那契数的总和

Sum of all even Fibonacci numbers

我正在尝试获取所有偶数斐波那契数的总和。我可以打印出这些数字,但我无法得到它们的总和。这是在 java.

class driver {
    public static void main(String [] args) {
        int a; 
        int b = 0;
        int c = 1;

        for (int i = 0; i < 10; i++) { // Finds fibonacci sequence
            a = b;
            b = c;
            c = a + b;

            if ( c % 2 == 0) { // Check if it's even
                int sum = 0;
                sum = sum + c;
                System.out.println(sum);
            }
            else {

            }
        }
    }
}

在for循环外声明整型变量sum。应该可以了。

你不应该在循环中每次都重新初始化 sum,因为这会导致它失去它的值。它的范围应该在 if 之外,以便每次都可以递增相同的变量。

class driver {
    public static void main(String [] args) {
        int a; 
        int b = 0;
        int c = 1;
        int sum = 0;

        for (int i = 0; i < 10; i++) { // Finds fibonacci sequence
            a = b;
            b = c;
            c = a + b;

            if (c % 2 == 0)  // Check if it's even
                sum += c;
        }
        System.out.println(sum);
    }
}
public static void main(String [] args) {
    int a; 
    int b = 0;
    int c = 1;
    int sum = 0;

    for (int i = 0; i < 10; i++) { // Finds fibonacci sequence
        a = b;
        b = c;
        c = a + b;

        if ( c % 2 == 0) { // Check if it's even
            sum += c;
        }
    }
    System.out.println(sum);
}

您最初设置 sum = 0 每次 'c' 是偶数。只有在进程开始之前,此代码才应作为 sum = 0 工作。这实际上是一个常见的错误,但您很快就会知道这是个坏主意。

如你所知,我将 System.out.println(sum) 语句放在循环之外,因此你不会有 10 个不同的数字作为输出。

public final class eu_p002_sol {  

    public static void main(String[] args) {  
        System.out.println(new eu_p002_sol().run());  
    }  
public String run() {  
        int sum = 0;  
        for (int x = 0; ; x++) {  
            int fib = fibonacci(x);  
            if (fib > 4000000)  
                break;  
            if (fib % 2 == 0)  
                sum += fib;  
        }  
        return Integer.toString(sum);  
    }  

    private static int fibonacci(int n) {  
        if (n < 0 || n > 46)  
            throw new IllegalArgumentException();  
        int a = 0;  
        int b = 1;  
        for (int i = 0; i < n; i++) {  
            int c = a + b;  
            a = b;  
            b = c;  
        }  
        return a;  
    }  
}  

试试这个

也许有人还在寻找正确答案:

static int sum = 0, seq = 0;

public static void main(String[] args) {

    fib(1,2);

}

static void fib(int i, int j) {

    seq = j;
    if (seq <= 4000000) {
        if (j % 2 == 0) {
            sum += j;
        }
        fib(j, i + j);
    } else {
        System.out.println(sum);
    }
}