Как работают рекурсивные функции? - C (СИ)
Формулировка задачи:
Всем привет!
Ни как не могу понять как работают рекурсивные функции.
а именно в каком месте функция вызывает саму себя и как это происходит.
как работает обыкновенная структура повторения знаю, а вот рекурсию без итерации не могу представить.
Вот пример программы, хотел бы узнать, рекурсия действует только в функции long fibonacci (long n)
или функция main тоже выполняется в цикле. В любом случае, откомпилировав в DEV C++ результат был такой:
Enter an integer: 5
Fibonacci <5> = 5
После того как нажимаешь на любую кнопку, окно исчезает.
И где тут рекурсия, цикл?
#include <stdio.h>
#include <conio.h>
long fibonacci(long);
main()
{
long result, number;
printf ("Enter an integer: ");
scanf ("%ld", &number);
result = fibonacci (number);
printf ("Fibonacci (%ld) = %ld\n", number, result);
getch ();
return 0;
}
long fibonacci (long n)
{
if (n == 0 || n == 1)
return n;
else
return fibonacci (n - 1) + fibonacci (n -2);
}Решение задачи: «Как работают рекурсивные функции?»
textual
Листинг программы
#include <stdlib.h>
long fib(long n)
{
static int i = 0;
printf("%d call of fibonacсi with argument %d\n", ++i, n);
return ((n == 0) || (n == 1) ? 1 : fib(n - 1) + fib(n - 2));
}
int main(void)
{
int n = 5;
printf("\nfibbonachi #%d = %d\n", n, fib(n));
return EXIT_SUCCESS;
}
Объяснение кода листинга программы
- Подключение стандартной библиотеки
- Определение рекурсивной функции fib, которая принимает целочисленный аргумент n
- Объявление статической переменной i, которая инициализируется значением 0
- Вывод на печать номера вызова функции fibonacci и аргумента n
- Возврат значения 1, если n равно 0 или 1, иначе рекурсивный вызов функции fib с аргументами n-1 и n-2
- В функции main создание переменной n со значением 5
- Вывод на печать значения функции fib с аргументом n равным 5
- Возврат значения EXIT_SUCCESS