Страницы

вторник, 7 июля 2015 г.

Вычисление числа Фибоначчи по его номеру на С++ (рекурсия)

Последовательность чисел Фибоначчи:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, …
Она начинается с 0 и 1, каждый следующий член последовательности равен сумме двух предыдущих.
Последовательность описывает форму спирали, соответственно, часто встречается в природе. Отношение последовательных чисел Фибоначчи сводится к числу 1,618…, которое называется «золотым сечением». Но сейчас не об этом. Я пока не буду выявлять все полезные и интересные свойства этой последовательности, а приведу пример программы, которая вычисляет число Фибоначчи по его номеру в последовательности.
Определим рекурсивно последовательность (fib – функция вычисления числа Фибоначчи):

Fib(0) = 0
Fib(1) = 1
Fib(n) = Fib(n-1) + Fib(n-2)
Текст программы:
//рекурсивная функция вычисления числа Фибоначчи
//по его номеру
#include <iostream>
using namespace std;

unsigned long fib(unsigned long);
void main()
{
    unsigned long result, number;
    cout<<"Vvedite celoe chislo: ";
    cin>>number;
    result = fib(number);
    cout<<"Chislo Fibonacci ("<<number<<") = "<<result<<endl;
    return;
}

//рекурсивная функция
unsigned long fib(unsigned long num)
{
    if(num==0 || num==1)
        return num;
    else
        return fib(num-1) + fib(num-2);
}


Первый вызов функции не рекурсивные, а все следующие – рекурсивные. При каждом вызове функция проверяет аргумент num, если равен 0 или 1, то возвращается num. Если нет, то функция делает два рекурсивных вызова себя же.
Вводить большие числа не рекомендуется, поскольку возрастает количество вызовов. Такие задачи лучше решать через итерации, а не через рекурсию.