Ответ
Рекурсия — это когда функция вызывает саму себя, прямо или через другие функции. Главное условие — должен быть базовый случай (условие выхода), иначе будет бесконечный вызов и переполнение стека.
Пример с факториалом:
function factorial(n) {
if (n === 1) return 1; // базовый случай
return n * factorial(n - 1); // рекурсивный вызов
}
console.log(factorial(5)); // 120
Особенности:
- Может быть менее эффективна по памяти, чем итеративный подход
- Подходит для задач с вложенной структурой (деревья, JSON)
- В JS есть ограничение на глубину рекурсии (обычно ~10k вызовов)
- Хвостовую рекурсию можно оптимизировать (TCO)
Ответ 18+ 🔞
Да ты послушай, что за дичь творится в программировании! Рекурсия, блядь! Это когда функция такая упоротая, что начинает сама себя вызывать, как будто зациклилась в зеркальной комнате, сука. Ну или через других таких же упырей — не суть. Главное, чтобы был какой-то просвет, базовый случай, а то пиздец наступит — бесконечный вызов и стек переполнится, как унитаз в общежитии после праздника.
Вот смотри, пример с факториалом, чтобы не быть голословным, как мартышлюшка:
function factorial(n) {
if (n === 1) return 1; // базовый случай, точка остановки, иначе пипец
return n * factorial(n - 1); // а вот и она, сука, сама себя зовёт
}
console.log(factorial(5)); // 120
А теперь особенности, которые надо понимать, чтобы не обосраться:
- По памяти может жрать, как не в себя, по сравнению с обычными циклами. Эффективность, блядь, на нуле.
- Зато для всякой вложенной хуйни — деревья, JSON-ы — это самое то, как вилка в глаз.
- В JS, конечно, не без косяков — глубина рекурсии ограничена, тысяч десять вызовов, и всё, ты в жопе.
- Но есть хитрость — хвостовая рекурсия. Её можно оптимизировать, если, конечно, твой движок не мудак шерстяной и поддерживает TCO. А так — волнение ебать, терпения ноль ебать.