в то время как условие цикла для вывода Фибоначчи

Я пытаюсь понять, как я могу установить условный оператор в цикле while, который будет принимать ввод пользователем желаемого числа фибоначчи и вычислять соответствующее число Фибоначчи. Входные данные пользователя 8 и выходные данные программы 34. Любая подсказка, которая может указать мне правильное направление или помочь мне увидеть проблему под другим углом, будет оценена по достоинству.

#include <iostream>
using namespace std;

int main ()
{
    bool exit;
    int fib;
    int fib1 = 1;
    int fib2 = 2;
    int fib3 = 0;

    cout << "The first Fibonacci number is 1" << endl;
    cout << "The second Fibonacci number is 2" << endl;
    cout << "what other Fibonacci number would you like? Enter -888 to exit: ";
    cin >> fib;

    while(fib ) //condition that makes sure output is the fibonacci the user is looking for
    {
        fib3 = (fib1+fib2);
        fib1 = fib2;
        fib2 = fib3;

        cout << "...and the Fibonnaci is..... " << fib << endl;
    }
    if(fib == -888)
    {
        exit = true;
    }

    return 0;
}

person Nebulan    schedule 17.10.2014    source источник
comment
Вы скомпилировали и запустили программу? Как он ведет себя, когда вы вводите 1? А для -888? Компилятор выдавал какие-либо предупреждения?   -  person CiaPan    schedule 17.10.2014
comment
Я скомпилировал, когда я ввожу 1, он работает бесконечно. Я не смог придумать условие, которое работает. для -888 есть предупреждение о том, что код никогда не будет выполняться, я использовал его скорее как заполнитель для того, как я могу заставить пользователя выйти из цикла после того, как он закончит запрашивать числа выдумки.   -  person Nebulan    schedule 17.10.2014
comment
Сделайте, как написали @P0W или @ChantryCargill: уменьшите свой индекс fib, чтобы вы знали, что должны остановиться, когда индекс станет равным нулю. Но проверьте его на -888 (или любое отрицательное значение) перед циклом, чтобы вы не попали в повторение уменьшения отрицательного значения...   -  person CiaPan    schedule 17.10.2014


Ответы (1)


Два возможных ответа.

Один из них заключается в вычислении числа Фибоначчи с использованием решения в замкнутой форме, которое равно \frac{(\frac{1 + \sqrt{5}}{2})^n - (\frac{1 - \sqrt{5}}{ 2})^n}{\sqrt{5}}.

Другой способ — использовать циклическую структуру, как вы это делаете. Я не хочу отвечать на вопрос за вас, но вам нужна переменная-счетчик в вашей структуре цикла. Начните с 1 и считайте до тех пор, пока не достигнете желаемой итерации числа Фибоначчи.

Что-то вроде

i = 1;
while(i < n)
{
    i++;
    //code
}
person Community    schedule 17.10.2014
comment
Вы можете пойти на счетчик. - person sumanta; 17.10.2014
comment
Решение закрытой формы на самом деле не работает с арифметикой с плавающей запятой. - person molbdnilo; 17.10.2014