Попытка получить числа фибоначчи ниже, чем входное число в фибоначчи l oop в c ++ - PullRequest
0 голосов
/ 26 мая 2020

Я пытаюсь создать программу, которая запрашивает у пользователя число "k" и выводит серию чисел меньше числа k. Например, если пользователь пишет 20, вывод должен быть:

0, 1, 1, 2, 3, 5, 8, 13

Вместо этого я получил:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181

Это означает, что печатаются 20 чисел Фибоначчи.

#include <iostream>

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

unsigned int fib(unsigned int num)
{
    if (num == 0 || num == 1)
    {
        return num;
    }
    else
    {
        return (fib(num - 1) + fib(num - 2));
    }
}

int main()
{
    int k = 0;

    cout << "White a number k ";
    cin >> k;

    for (int i = 0; i < k; i++)
        cout << fib(i) << endl;

    return 0;
}

Я пробовал использовать "break;" но это не работает. Как можно разбить л oop?

Ответы [ 2 ]

1 голос
/ 26 мая 2020

Вы сравниваете введенный предел k с итератором i, поэтому ввод читается как количество чисел в последовательности Фибоначчи, которые вы хотите вывести, а не как верхний предел.

Чтобы делайте то, что вы хотите, вам нужно сравнить предел k с результатом, возвращаемым функцией fib, чтобы вы могли остановить l oop, как только предел будет превышен.

Живая демонстрация

Сохранение for l oop:

int main()
{
    int k = 0;
    int res = 0; // store the result of fib(i) to avoid duplicate calls

    cout << "White a number k: ";
    cin >> k;

    for (int i = 0; (res = fib(i)) < k; i++){ //assign fib(i) to res
        cout << res << endl;                  //when res is larger than k exits the loop
    }
    return 0;
}

Или использование while l oop:

int main()
{
    int k = 0;
    cout << "White a number k: ";
    cin >> k;
    int res;
    int i = 0; //iterator

    while((res = fib(i++)) < k) { //assign result to res and compare it with the limit k
        cout << res << endl; //output the result while it's smaller than k
    }
    return 0;
}

Пробный прогон :

White a number k: 20
0
1
1
2
3
5
8
13
0 голосов
/ 26 мая 2020
  for (int i=0; i<k; i++){
      if(fib(i)<k)    //while fib(i) is less than k,it prints fib(i)            
       cout << fib(i) << endl;      
      else            //if number becomes greater than k,then it will break out from the loop.
       break;
    }    

Надеюсь, это поможет !!

...