Что не так с моей рекурсивной программой Фибоначчи? - PullRequest
1 голос
/ 09 февраля 2012

Я не уверен, в чем вина моей логики. Пример вывода:

How many terms of the Fibonacci Sequence do you wish to compute?
1
1
1
--How many terms of the Fibonacci Sequence do you wish to compute?
5
5
5
5
5
5
5

Почему он это делает?

    // Recursive Fibonacci Sequence
#include <iostream>
using namespace std;

double fib(double number);

int main(void) {
        double number;
        cout << "How many terms of the Fibonacci Sequence do you wish to compute?" << endl;
        cin >> number;

        for(int i = 0; i <= number; ++i)
                cout << fib(number) << endl;
} // end main

// function fib definition
double fib(double number) {
        if((number == 0) || (number == 1))
                return number;
        else
                return fib(number - 1) + fib(number - 2);
} // end function fib

Ответы [ 3 ]

9 голосов
/ 09 февраля 2012

Посмотрите на ваш цикл:

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

Обратите внимание, что тело цикла не использует i ... оно всегда вызывает fib(number).Если изменить это значение на fib(i), то это будет исправлено.

(Это не очень эффективно, поскольку каждый раз вы будете пересчитывать значения, но это отдельный вопрос. Хотя вы могли бы поставитьпечать в fib, в которой смешаны вопросы «что делать с результатами» и «вычисления последовательности Фибоначчи».)

1 голос
/ 09 февраля 2012

Вы должны просто передать 'i' в качестве параметра в вашем цикле for, а не 'number'

1 голос
/ 09 февраля 2012

Сделать это:

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