Программа, использующая циклы while для вычисления первых n чисел Фибоначчи - PullRequest
0 голосов
/ 29 сентября 2011

Когда я запускаю его и ввожу число, оно просто повторяется без перерыва. например, если я поставлю 3, он сделает это 3 3 3 3 3 НО НЕ ОСТАНОВИТЬ

int main()
{
int current=0, prev=1, prev2=1, fibnum;
cout << "Enter the number of Fibonacci numbers to compute: ";
cin >> fibnum;
if (fibnum <=0)
{
    cout << "Error: Enter a positive number: ";
}
while (fibnum > 0){
    current = prev + prev2;
    prev = prev2;
    prev2 = current;
    current++;

    cout << "," << fibnum;
    cout << endl;
}
return 0;
}

Ответы [ 8 ]

5 голосов
/ 29 сентября 2011

Есть несколько проблем с кодом:

  1. Вы никогда ничего не назначаете для fibnum внутри тела цикла, поэтому его значение никогда не меняется.
  2. Цельcurrent++ совершенно неясно.

По сути, вам нужно определиться с точным значением каждой переменной и придерживаться ее на протяжении всего .При использовании этих переменных существует явная путаница в отношении целей current и fibnum.

2 голосов
/ 29 сентября 2011
#include <iostream>

using namespace std;

int main(){
    int current=0, prev=0, prev2=1, fibnum;
    cout << "Enter the number of Fibonacci numbers to compute: ";
    cin >> fibnum;
    if (fibnum <=0){
        cout << "Error: Enter a positive number: ";
    }
    while (fibnum--){
        cout << prev ;
        current = prev + prev2;
        prev = prev2;
        prev2 = current;
        if(fibnum)
            cout << ",";
    }
    cout << endl;
    return 0;
}
1 голос
/ 29 сентября 2011

изменить на

int current_fib_num = 0;
....
while (current_fib_num++ != fibNum)
{
    ....
    // your code here
}
0 голосов
/ 08 сентября 2013
#include <iostream>

using namespace std;

    int main()
    {
         int i=0,j=1;
        int c,n,count=0,d;
        cout<<"enter num";
        cin>>n;
        c=i+j;
        cout<<i<<j;
    while(count<n-2)
        {   d=j+c;
            cout<<d;
            j=c;
            c=d;
            count++;
        }
         return 0;
    }
0 голосов
/ 29 сентября 2011
#include <iostream>

using std::cin;
using std::cout;

int main()
{
  int a=1, b=1, nums_to_print;
  while (1) {
    cout << "Enter the number of Fibonacci numbers to compute: ";
    cin >> nums_to_print;
    if (nums_to_print > 0) {
      while (1) {
        cout << a;
        b += a;
        a = b - a;
        if (--nums_to_print) cout << ",";
        else break;
      }
      cout << "\n";
      return 0;
    }

    cout << "Error: Enter a positive number.\n";
  }
}

Демо: http://ideone.com/3H8Fq

0 голосов
/ 29 сентября 2011

Вы пытаетесь напечатать фибнум, но он не изменяется внутри цикла while. Вы должны печатать текущий вместо этого. Также вам нужно установить счетчик, который будет видеть конец цикла while.

0 голосов
/ 29 сентября 2011

В дополнение к предыдущим ответам обратите внимание, что вы можете использовать преимущества рекурсии, если вам нужно вычислить число выдумок с некоторым определенным числом. Примерно так:

#include <cstddef>

std::size_t fib( std::size_t num )
{
    // For first two numbers
    if (num <= 2)
        return 1;

    return fib(num - 1) + fib(num - 2);
}

но вы должны иметь в виду, что это приведет к избыточным вычислениям, так как повторяющийся пересчет тех же чисел и использование стека для передачи аргументов функций.

0 голосов
/ 29 сентября 2011

Есть пара вещей, которые нужно исправить.

Вам нужна переменная count;

int current=0, prev=0, prev2=1, fibnum;

int count;

....

Для выводапервое число перед циклом

cout<<prev2;

Вы можете изменить это на цикл for, чтобы упростить подсчет чисел

for(count = 0; count <= fibnum; count++){
    current = prev + prev2;
    prev = prev2;
    prev2 = current;

Вам нужно печатать текущее, а не fibnum -> fibnumэто общее количество, которое вам нужно напечатать

    cout << "," << current;
}
...