Что такое рекурсия

Ответ

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

Пример с факториалом:

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. А так — волнение ебать, терпения ноль ебать.