编写了一个程序来显示与用户输入对应的斐波那契数,但它从零开始而不是从一开始?
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
。由于该值 starts 在 0 + 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;
}
}
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
。由于该值 starts 在 0 + 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;
}
}