java - Fibonacci - 为什么这给我错误的计算?

标签 java math fibonacci

问题是...

Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:

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

By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.

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

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;

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

关于java - Fibonacci - 为什么这给我错误的计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48117635/

相关文章:

java - Netbeans:安装了Java 模块但不能创建Java 项目,为什么?

c - 计算矩阵的 c 次方

c++ - C++ 中非常快速的近似对数(自然对数)函数?

fibonacci - 如何使用运算符(或其他东西)编写 N N N .... N?

python - 斐波那契数列从a点到b点?

JavaFx如何每1小时检查一次时间

java - 如何使用 Criteria Query 只选择外键值?

java - 为什么 swing GUI 表单生成器不生成二进制类文件/java 源代码?

java - 渲染由三角形组成的立方体会产生奇怪的旋转角度

python - 这个程序中的 "return fibonacci... "是怎么回事?