私は演習としてファボナッチ数を計算するための簡単なコードを書いています。コードは機能しますが、私は理由を知りません。私は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_2=0
、ループ、Fib_1=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;
}
このような問題を解決する適切なツールは、デバッガです。スタックオーバーフローを尋ねる前に、コードを一行ずつ進める必要があります。詳しいヘルプは、[小さなプログラムをデバッグする方法(Eric Lippert)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)を参照してください。最低限、問題を再現する[最小、完全、および検証可能](http://stackoverflow.com/help/mcve)の例と、その問題を再現するためのデバッガ。 –
初期化されていない変数を使用すると、プログラムによって[未定義の動作](http://stackoverflow.com/a/4105123/1505939)が発生します。 'Fib_1'と' Fib_2'( 'if'の外側で' Fib_n')の初期値を設定してください。 –
@AndrewL。彼は '0 + 0'を計算するために' 0'を得なかった理由を尋ねています –