我正在编写一个简单的代码来计算Fabonacci数字作为练习。代码有效,但我不知道为什么。我有n=1
和n=2
的一些特殊情况,它是序列中数字的位置(数字是0和1)。然而,在那之后,数字在这个循环中计算。
while(n>LoopCount)
{
Fib_n=Fib_1+Fib_2;
Fib_2=Fib_1;
Fib_1=Fib_n;
LoopCount++;
}
进入循环,Fib_1=0
,Fib_2=0
和Fib_n=1
。为什么这个循环不会吐出0
无论如何?整个代码如下。
#include <iostream>
using namespace std;
int main()
{
cout <<"Which number of the Fibonacci sequence do you want to calculate?" <<endl;
int n;
cin >>n;
cout <<endl;
int Fib_n;
int Fib_1;
int Fib_2;
int LoopCount=1;
if(n>1)
{
Fib_n=1;
LoopCount++;
while(n>LoopCount)
{
Fib_n=Fib_1+Fib_2;
Fib_2=Fib_1;
Fib_1=Fib_n;
LoopCount++;
}
}
cout <<Fib_n;
return 0;
}
答案 0 :(得分:1)
int Fib_1;
int Fib_2;
从未初始化。因此,第一次计算Fib_n=Fib_1+Fib_2;
时,Fib_n
将获得两个未初始化变量的总和。
我修改了你的代码以便它可以正常工作。
#include <iostream>
using namespace std;
int main()
{
cout <<"Which number of the Fibonacci sequence do you want to calculate?" <<endl;
int n;
cin >> n;
cout << endl;
int Fib_1 = 1;
int Fib_2 = 1;
int count = 0;
while(n > count)
{
Fib_1 = Fib_1 + Fib_2;
Fib_2 = Fib_1 - Fib_2;
count++;
}
cout << Fib_1;
return 0;
}
答案 1 :(得分:0)
Fib_1
您将其作为非正规化变量,因此您可能会获得输出的垃圾值。
Fib_2 = Fib_1
接下来,您使用Fib_2
初始化Fib_1
,这意味着它们共享相同的(随机)值。
在调试模式下,这些都被初始化为0,并添加它们:
Fib_n=Fib_1+Fib_2;
使总和等于0.在发布模式下,您可以期望编译器中的随机值。以下是Uninitialized Variables的更多信息。