编写了一个程序来显示与用户输入对应的斐波那契数,但它从零开始而不是从一开始?

Wrote a program that displays the fibonacci number corresponding to user input, but it starts at zero instead of one?

std::cout << "Input a number: ";

        int userParameter{};
        std::cin >> userParameter;

        int firstNumber{0};
        int secondNumber{1};

        int sumNumber{firstNumber + secondNumber};

        for(int i{1};i <= userParameter;i++)
        {
            sumNumber = firstNumber + secondNumber;
            firstNumber = secondNumber;
            secondNumber = sumNumber;
        }

        std::cout << "That number in the fibonacci sequence is " << sumNumber << '\n';

所以我已经为此工作了一个小时,这是我最接近预期结果的事情。我原来的程序在自己的函数中有循环,但我认为对于这么小的程序来说这可能是浪费 space 并将其移回主循环。我的问题是斐波那契数列出于某种原因从 0 而不是 1 开始。我尝试了不同的小调整,因为我觉得我很接近但在某处遗漏了一个小细节。我试过改变 int i 的值,我试过改变 sumNumber 初始值设定项的位置,我试过修改 for 循环参数中的 int userParameter,我可以肯定地说我是最后一个可以解决这个问题。

如果我想要更改序列中的第一个数字,我可能会先查看以下行:

int firstNumber{0};

我建议您将该值初始化为 1 而不是 0。这会将您的序列从 {0, 1, 1, 2, 3, 5, 8, ...} 更改为 {1, 1, 2, 3, 5, 8, 13, ...}


但是,如果问题实际上是第一个数字错误,那可能是因为您在所有情况下都提供了 sumNumber。由于该值 starts0 + 1,因此 F<sub>0</sub> 将不正确.您可以通过处理 F<sub>0</sub>F<sub>1</sub>[=38= 来解决这个问题] 作为特例,只为<code>F<sub>n</sub>进入循环,n > 1:

int sumNumber;
if (userParameter == 0) {
    sumNumber = firstNumber;
} else if (userParameter == 1) {
    sumNumber = secondNumber;
} else {
    for (int i = 2; i <= userParameter; i++) {
        sumNumber = firstNumber + secondNumber;
        firstNumber = secondNumber;
        secondNumber = sumNumber;
    }
}