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

Рекурсия является своего рода вызовом функции в который вызовы функции самим. Такие функции являются также вызванными рекурсивными функциями.

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

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

Это определяет два основных подхода для повторного вызова некоторой части кода.

  • Итерационный подход (Используя конструкции цикла)
  • Рекурсивный подход (Используя рекурсию)

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

Примеры на нескольких языках

C

void recursiveFunction(int num) { if (num < 4) recursiveFunction(num + 1); printf("%d\n", num); } 

C++

void recursiveFunction(int num) { if (num < 4) recursiveFunction(num + 1); cout<<num; } 

Java

public static int factorial(int N) { if (N == 1) return 1; return N * factorial(N-1); } 

OCaml

let rec factorial n = if n <= 1 then 1 else n * factorial (n - 1) 

Haskell

factorial n = if n == 0 then 1 else n * factorial (n - 1) 

Perl

sub factorial { if ($_[0] > 1) { return $_[0] * &factorial($_[0] - 1); } else { return 1; } } 

Haxe

function factorial(num:Int) { if (num == 1) return 1; return num * factorial(num - 1); } 

Python (2 или 3)

def factorial(n): return 1 if n <= 1 else n * factorial(n - 1) 

Использование тега

должна использоваться для связанных с программированием проблем при использовании рекурсии на любом языке программирования. На Переполнении стека избегайте теоретических вопросов такой как, "как рекурсия работает?"

Ссылки

Дополнительная информация