Это функция, которая может вызывать сама себя и является альтернативой использованию циклов, но мы должны иметь в виду, что она менее эффективна.

Мы можем вызывать одну и ту же функцию определенное количество раз, пока не будет выполнено условие.

Теперь, когда у нас есть представление об определении рекурсии, давайте узнаем, как ее использовать и почему в некоторых обстоятельствах она лучше, чем обычные циклы, это дает нам очень элегантное решение проблемы, но всегда перед ее использованием нам нужно иметь уверенность, что базовая проблема будет решена, если мы этого не сделаем, функция будет повторяться вечно, и это называется условием выхода.

Некоторые приключения:

  • Простые решения и понятно.
  • Мы можем преобразовать сложные алгоритмы в простые.
  • Очень мощный.

Это круто, не так ли?… Все звучит так, будто мы больше никогда не будем использовать циклы, но это не очень хорошее решение, расслабься, чувак. У этого мощного инструмента есть очень важный риск, который нужно иметь в виду. Давайте посмотрим на них, чтобы быть мудрыми при его использовании, но во-первых, память.

ОЗУ ПАМЯТИ:

Наш компьютер не имеет бесконечного пространства в памяти для использования программ, если мы откроем много программ, наш компьютер будет замедляться (или хуже), потому что этого недостаточно, чтобы открыть все эти программы. Когда мы используем функции, это тот же случай, память должна освободить место для их выполнения, и это называется Распределение памяти, и когда программа останавливается, память снова освобождается для ее выполнения. используется для другой программы, и это называется (конечно) Освобождение памяти.

Как видите, наша самая большая проблема — это память. Например, когда вызывается функция, система создает пространство в памяти для ее выполнения, как циклы, но в случае рекурсии память каждый раз, когда мы повторяем, освобождает место в другой раз, пока условие не будет выполнено, когда это произойдет, все память наших функций освобождается. У этого есть некоторые проблемы, потому что, если мы создадим функцию, которая вызывает себя слишком много раз, память будет насыщена.

Но все, что мы узнали, не будет полным, если у нас нет всех определений различных способов его использования, поэтому у нас есть следующие формы рекурсии:

  • Прямая рекурсия:

Эта функция вызывает себя в одном и том же блоке кода, он может вызывать сам себя один раз или может вызываться несколько раз во время своего выполнения, но вызывать только одну и ту же рекурсивную функцию, например факториальную функцию:

CODE
#include<stdio.h>
long int multiplyNumbers(int n);
int main() {
    int n;
    printf("Enter a positive integer: ");
    scanf("%d",&n);
    printf("Factorial of %d = %ld", n, multiplyNumbers(n));
    return 0;
}

long int multiplyNumbers(int n) {
    if (n>=1)
        return n*multiplyNumbers(n-1);
    else
        return 1;
}
  • Косвенная рекурсия:

Функция вызывает другой метод или многие другие методы, которые вызывают этот вызов после исходной функции.

CODE
int testfunc1(int num) {
 if (num == 0)
 return 0;
 else
 return (testfunc2(num — 1));
}
int testfunc2(int num2) {
 return testfunc1(num2–1);
}
  • Нижняя рекурсия:

Это также называется «хвостом», и когда нет ожидающих операций, когда вызывается рекурсивная функция, имеет эту форму. Другой факториал, но в хвостовой форме

CODE
int fact(int n){
  if (n == 1)
    return 1;
  else
    return (n * fact(n - 1));
}

В заключение мы понимаем силу рекурсии в программировании, но не забывайте использовать ее только тогда, когда это необходимо и когда итерация менее эффективна, если вы будете практиковаться и помнить об этом, у вас будет отличный инструмент для использования.