【问题标题】:Fibonacci - Why is this giving me the incorrect calculation?斐波那契 - 为什么这给了我不正确的计算?
【发布时间】:2018-06-15 12:05:46
【问题描述】:

问题是……

斐波那契数列中的每个新项都是通过添加前两项来生成的。从 1 和 2 开始,前 10 个术语将是:

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

通过考虑斐波那契数列中值不超过四百万的项,求偶数项之和。

我已经制作了一个应该这样做的代码,粘贴在下面:

public class Main {
    public static void main(String[] args) {
        // Setting up the variables. sumF3 will be printed at the end.
        int sumF1 = 1;
        int sumF2 = 2;
        int sumF3 = 0;
        // If loops to cancel out the odd numbers, but let them be added to sumF2 etc anyway.
        while(4000000 > sumF1) {
            if (sumF1 % 2 == 0) {
                sumF3 += sumF1;
            }
            if (sumF2 % 2 == 0) {
                sumF3 += sumF2;
            }
            // Normal fibonacci sequence.
            sumF1 += sumF1 + sumF2;
            sumF2 += sumF1 + sumF2;
        }
        System.out.println(sumF3);
    }
}

我首先使用两个 if 循环过滤掉奇数,然后将其添加到 sumF3。它将继续添加到 sumF3 中,直到达到 400 万以下。当 while 循环停止时,它应该打印出“4613732”,但它会打印出不同的东西(4194302)。我觉得这里有一个逻辑缺陷。

【问题讨论】:

    标签: java math fibonacci


    【解决方案1】:

    您在斐波那契数列中的表达式不正确。您正在执行以下操作:

    // Normal fibonacci sequence.
            sumF1 += sumF1 + sumF2;
            sumF2 += sumF1 + sumF2;
    

    本质上是这样做的:

    sumF1 = sumF1+sumF1+sumF2, sumF2 = sumF2+sumF1+sumF2.

    如果你把表达式改成下面的样子,你应该会得到正确的答案:

    // Normal fibonacci sequence.
            sumF1 += sumF2;
            sumF2 += sumF1;
    

    += 运算符将表达式的值与变量的值相加,并将结果赋给变量。您正在混合中添加一个额外的变量,这会影响您的结果。

    【讨论】:

      【解决方案2】:

      其实你只是犯了一个小错误。线条

      sumF1 += sumF1 + sumF2;
      sumF2 += sumF1 + sumF2;
      

      应该是

      sumF1 = sumF1 + sumF2;
      sumF2 = sumF1 + sumF2;
      

      注意= 而不是+=

      【讨论】:

        猜你喜欢
        • 2016-08-26
        • 2013-03-31
        • 2012-12-29
        • 2013-10-15
        • 1970-01-01
        • 1970-01-01
        • 2020-11-18
        • 2020-01-18
        • 1970-01-01
        相关资源
        最近更新 更多