Почему мой код работает? Простая арифметика
Я пишу простой код для вычисления чисел Фабоначчи в качестве упражнения. Код работает, но я не понимаю, почему. У меня есть несколько особых случаев для 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;
}
2 ответа
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. В режиме выпуска вы можете ожидать случайные значения от компилятора. Вот больше информации о неинициализированных переменных.