Как работают рекурсивные функции? - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д