Почему мой код работает? Простая арифметика

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

Другие вопросы по тегам