斐波那契-为什么这给了我错误的计算?

泰勒:

问题是...

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

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

通过考虑斐波那契数列中值不超过400万的项,找到偶值项的总和。

我已经编写了应该执行此操作的代码,粘贴在下面:

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)。我觉得这里存在逻辑缺陷。

彼得·凯:

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

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

实质上是这样做的:

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

如果将表达式更改为以下内容,则应获得正确的答案:

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

+ =运算符将表达式的值添加到变量的值,并将结果分配给变量。您要在混合中添加一个额外的变量,该变量会导致结果失败。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章