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

时间:2018-01-05 16:32:12

标签: java math fibonacci

问题是......

  

Fibonacci序列中的每个新术语都是通过添加前两个术语生成的。从1和2开始,前10个术语将是:

     

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

     

通过考虑Fibonacci序列中的值不超过四百万的项,找到偶数项的总和。

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

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 个答案:

答案 0 :(得分:5)

你实际上只犯了一个小错误。行

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

应该是

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

请注意=而不是+=

答案 1 :(得分:5)

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

void drawBoard(char tabuleiro[board_size][board_size]) {
    // Print top line
    printf("  ");
    for (int col = 0; col < board_size; col++) {
        printf(" %-2d", col+1);
    }
    printf("\n");

    // Print grid
    for (int row = 0; row < board_size; row++) {
        // Print letter
        printf("%c ", 'A' + row);
        // Print board
        for (int col = 0; col < board_size; col++) {
            printf(" %c ", tabuleiro[row][col]);
        }
        printf("\n");
    }
}

基本上是这样做的: sumF1 = sumF1 + sumF1 + sumF2,sumF2 = sumF2 + sumF1 + sumF2。

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

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

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