2016-09-05 11 views
-5

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

Правильный инструмент для решения таких проблем - ваш отладчик. Перед тем, как просить о переполнении стека, вы должны пропустить свой код по очереди *. Для получения дополнительной информации, пожалуйста, прочтите [Как отлаживать небольшие программы (Эрик Липперт)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Как минимум, вы должны \ [изменить] ваш вопрос, чтобы включить пример [Минимальный, полный и проверенный] (http://stackoverflow.com/help/mcve), который воспроизводит вашу проблему, а также замечания, сделанные вами в отладчик. –

+0

Ваша программа вызывает [неопределенное поведение] (http://stackoverflow.com/a/4105123/1505939) с использованием неинициализированных переменных. Вы должны установить начальные значения для 'Fib_1' и' Fib_2' (и 'Fib_n' вне' if'). –

+0

@AndrewL. он спрашивает, почему он НЕ получил '0' для вычисления' 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; 
} 
0
Fib_1 

У вас есть, что в качестве uninitalized переменной, так что вы можете получить значение мусора для вывода.

Fib_2 = Fib_1 

Далее инициализировать Fib_2 с Fib_1, то есть они как одни и те же (случайное) значение.

В режиме отладки, они оба инициализируется в 0, и добавление их:

Fib_n=Fib_1+Fib_2; 

составляет сумму, равную 0. В режиме выпуска, можно ожидать случайных значений от компилятора. Подробнее о Uninitialized Variables.