Сайт TechStop-Ekb.Ru, логотип текстовый.Сайт Тех Стоп Екб Ру, логотип инфографика.

Recursion, calling a function from itself.

Рекурсия, процесс вызова функции из самой себя.

Чтобы понять рекурсию, нужно понять рекурсию - шутка программистов ...

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

Рекурсия и рекуррентность - это два разных понятия ... Они не связаны друг с другом напрямую ... Однако, в некоторых случаях, рекуррентное соотношение может быть решено рекурсивно, когда каждое следующее значение последовательности вычисляется с помощью предыдущего значения ...

Как связаны рекурсия и итерация ? ... Иногда говорят, что итерация, это - условный шаг рекурсии ... Рекурсия и итерация - это два способа решения задачи повторения блока кода в программировании ... В некоторых случаях рекурсия и итерация могут использоваться для решения одной задачи ... Однако, в большинстве случаев это - два разных подхода, каждый со своими достоинствами и недостатками ...

Любая рекурсия может быть переделана в цикл (читай - в итерацию) ... Варианты с циклом - могут быть эффективнее, но (при сложных опросах, с ветвлениями) рекурсия - легче и проще ... Рекурсия, обрабатывая код - изменяет и вызывает саму себя, где шаг изменения : заложен в ее условие (сравнения / выражения) ; поэтому, начиная выполняться, рекурсия в принципе не знает конечных границ, и будет, например : рекурсивно проверять папки и файлы, которых может быть - и 600, и 12000 (тысяч) ... Рекурсия похожа на виртуальный цикл, который создается и работает динамически ...

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

Выбор между рекурсией, циклом и оператором for - зависит от специфики задачи, ее требований и контекста, в котором она должна быть решена ... Общий прототип рекурсии представляет из себя код ...
//
function recursive_func(parameter) {
// Базовый случай ...
if (/* условие для завершения рекурсии ... */) {
// возврат значения или выполнение действия ...
} else {
// Рекурсивный вызов функции с измененным параметром ...
recursive_func(modif parameter)
}
}

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

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

Оператор for может быть использован в рекурсии для итерации по заданной последовательности элементов или в определённом диапазоне ... Он может быть использован вместе с условными операторами, такими как if, для более сложной логики управления потоком программы ...

Когда возникает рекурсия ? ... Как понять, в какой точке кода происходит рекурсивный вызов ? ... Ведь - нет специального оператора начала рекурсии ... Разбор вызова рекурсии на примере вычисления факториала ... Почему для вычисления факториала или чисел Фибоначчи - явно используется рекурсивный подход : потому-что они представляют собой конкретные математические задачи, для которых существуют известные алгоритмы решения, которые могут быть реализованы с использованием циклов и рекурсии в программировании ... Если ваш собственный алгоритм подходит под условия рекурсии - он также может быть решён рекурсивным путём ...
n=5
function factorial(n) {
if (n === 0 || n === 1) { // базовый случай ... (три знака равно = = = строгое сравнение, не только по значению, но и по типу данных) ...
return 1;
} else {
return n * factorial(n - 1); // поскольку n-1 это - неизвестное значение, для решения задачи, от factorial(n) - рекурсивно создаётся новая подобная функция factorial(n - 1) [включая весь код функции / прототипа], и пока она не будет вычислена - ответ в этой строке получить нельзя ... Далее происходит циклическая проверка для всех n (n-1), пока не будет достигнут базовый случай (0 или 1), и рекурсия - прекратится, а результаты расчётов - возвращаются по цепочке вызовов - обратно - для вычисления исходного вызова функции ...
}
}

Раздел define : список всех страниц ...