Рекурсия — это мощная концепция программирования, которая предполагает решение проблемы путем ее разбиения на более мелкие, самоподобные подзадачи. В JavaScript рекурсия может быть ценным методом решения широкого круга проблем. В этой статье мы рассмотрим несколько методов реализации рекурсии в JavaScript и приведем примеры кода, демонстрирующие их использование.
Метод 1: базовая рекурсия
Самый простой способ реализовать рекурсию — использовать простую рекурсивную функцию. Давайте рассмотрим пример, в котором мы хотим напечатать числа от 1 до заданного предела.
function printNumbersRecursive(n) {
if (n > 0) {
printNumbersRecursive(n - 1);
console.log(n);
}
}
printNumbersRecursive(5);
Метод 2: хвостовая рекурсия
Хвостовая рекурсия — это метод, при котором рекурсивный вызов является последней операцией в функции. Этот подход позволяет повысить производительность и избежать ошибок переполнения стека для больших входных данных. Вот пример печати чисел с использованием хвостовой рекурсии:
function printNumbersTailRecursive(n, current = 1) {
console.log(current);
if (current < n) {
printNumbersTailRecursive(n, current + 1);
}
}
printNumbersTailRecursive(5);
Метод 3: рекурсия с аккумулятором
В некоторых случаях полезно накапливать результаты во время выполнения рекурсии. Давайте изменим наш предыдущий пример, чтобы числа накапливались в массиве:
function printNumbersWithAccumulator(n, current = 1, result = []) {
if (current > n) {
console.log(result);
return;
}
result.push(current);
printNumbersWithAccumulator(n, current + 1, result);
}
printNumbersWithAccumulator(5);
Метод 4: Косвенная рекурсия
Косвенная рекурсия предполагает вызов нескольких функций, которые, в свою очередь, вызывают друг друга. Вот пример:
function printOddNumbers(n) {
if (n > 0) {
if (n % 2 !== 0) {
console.log(n);
}
printEvenNumbers(n - 1);
}
}
function printEvenNumbers(n) {
if (n > 0) {
if (n % 2 === 0) {
console.log(n);
}
printOddNumbers(n - 1);
}
}
printOddNumbers(5);