为什么我的代码有效?简单算术
Why does my code work? Simple arithmetics
我正在编写一个简单的代码来计算 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;
}
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;
}
Fib_1
你将它作为一个未初始化的变量,所以你可能会得到一个垃圾值作为输出。
Fib_2 = Fib_1
接下来,您将 Fib_2
初始化为 Fib_1
,这意味着它们共享相同的(随机)值。
在调试模式下,它们都初始化为0,并添加它们:
Fib_n=Fib_1+Fib_2;
使总和等于 0。在发布模式下,您可以期望来自编译器的随机值。这里有更多关于 Uninitialized Variables.
的信息
我正在编写一个简单的代码来计算 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;
}
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;
}
Fib_1
你将它作为一个未初始化的变量,所以你可能会得到一个垃圾值作为输出。
Fib_2 = Fib_1
接下来,您将 Fib_2
初始化为 Fib_1
,这意味着它们共享相同的(随机)值。
在调试模式下,它们都初始化为0,并添加它们:
Fib_n=Fib_1+Fib_2;
使总和等于 0。在发布模式下,您可以期望来自编译器的随机值。这里有更多关于 Uninitialized Variables.
的信息