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