斐波那契数列 - 为什么我的计算结果不正确?

3
问题是...
每个新的斐波那契数列项都是通过将前两项相加生成的。通过从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)。我觉得这里存在逻辑缺陷。

2个回答

5
您实际上只犯了一个小错误。这几行代码:
sumF1 += sumF1 + sumF2;
sumF2 += sumF1 + sumF2;

应该是

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

注意使用=而不是+=

5
您的斐波那契数列表达式是错误的。您正在执行以下操作:
// Normal fibonacci sequence.
        sumF1 += sumF1 + sumF2;
        sumF2 += sumF1 + sumF2;

基本上就是这样做:

sumF1 = sumF1+sumF1+sumF2,sumF2 = sumF2+sumF1+sumF2。

如果你把表达式改为以下内容,应该会得到正确的答案:

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

+= 运算符将表达式的值加到变量的值上,并将结果赋值给该变量。你在混合中添加了一个额外的变量,这会使你的结果出错。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接