所有偶数Fibonacci数的总和

时间:2015-11-02 16:08:51

标签: java debugging fibonacci

我试图获得所有偶数斐波纳契数的总和。我可以打印出数字,但我无法得到它们的总和。这是在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 {

            }
        }
    }
}

5 个答案:

答案 0 :(得分:6)

每次循环内部都不应重新初始化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);
    }
}

答案 1 :(得分:2)

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个不同的数字作为输出。

答案 2 :(得分:1)

在for循环外声明整数变量sum。应该这样做。

答案 3 :(得分:1)

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;  
    }  
}  

试试这个

答案 4 :(得分:0)

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

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);
    }
}