【问题标题】:Sum of all even Fibonacci numbers所有偶数斐波那契数的总和
【发布时间】:2015-11-02 16:08:51
【问题描述】:

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

            }
        }
    }
}

【问题讨论】:

  • 将打印语句置于循环之外。
  • 每次找到偶数时,您都会在循环内将总和设置为0,因此有效地代码就是sum = c。例如将int sum = 0 移出循环。
  • 看看你在哪里初始化sum;自己单步执行代码,看看为什么会出现问题。
  • 偶数项会不断出现,因此所有偶数项的总和是无穷大。

标签: java debugging fibonacci


【解决方案1】:

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

【讨论】:

  • 当你使用400万时它给出一个负数
【解决方案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 个不同的数字作为输出。

【讨论】:

  • 当您使用 400 万作为斐波那契数列的值时,它会给您一个负数。这不是正确的答案。
【解决方案3】:

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

【讨论】:

    【解决方案4】:
    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;  
        }  
    }  
    

    试试这个

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        猜你喜欢
        • 2021-12-21
        • 1970-01-01
        • 1970-01-01
        • 2015-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-04
        • 1970-01-01
        相关资源
        最近更新 更多