Как работают рекурсивные функции? - 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;
}

Объяснение кода листинга программы

  1. Подключение стандартной библиотеки
  2. Определение рекурсивной функции fib, которая принимает целочисленный аргумент n
  3. Объявление статической переменной i, которая инициализируется значением 0
  4. Вывод на печать номера вызова функции fibonacci и аргумента n
  5. Возврат значения 1, если n равно 0 или 1, иначе рекурсивный вызов функции fib с аргументами n-1 и n-2
  6. В функции main создание переменной n со значением 5
  7. Вывод на печать значения функции fib с аргументом n равным 5
  8. Возврат значения EXIT_SUCCESS

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.6 из 5