Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: recursion, base case, recursive case, stack overflow, termination condition

Какие условия корректной рекурсии?

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

Короткий ответ

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

Длинный ответ

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

1. Базовый случай (Base Case)

Это условие, при котором функция завершает работу, не совершая новых рекурсивных вызовов. Базовый случай служит точкой остановки, предотвращая бесконечную цепочку вызовов. Без него рекурсия будет продолжаться до тех пор, пока не исчерпает стек вызовов, что приведёт к ошибке переполнения стека (stack overflow).

2. Рекурсивный случай (Recursive Case)

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

Пример: Вычисление факториала

Рассмотрим классический пример вычисления факториала числа n (n!).

function factorial(n) {
  // Базовый случай: факториал 0 или 1 равен 1
  if (n <= 1) {
    return 1;
  }
  // Рекурсивный случай: n! = n * (n-1)!
  // Аргумент (n-1) приближается к базовому случаю (1)
  return n * factorial(n - 1);
}

console.log(factorial(5)); // Вывод: 120

В этом примере базовый случай — n <= 1. Рекурсивный вызов factorial(n - 1) гарантирует, что значение n уменьшается с каждым шагом, в конечном итоге достигая 1.

Где применяется рекурсия?

Рекурсия широко используется в алгоритмах и структурах данных:

  • Обход деревьев и графов (например, DOM-дерево в браузере).
  • Алгоритмы "разделяй и властвуй" (быстрая сортировка, сортировка слиянием).
  • Решение задач комбинаторики и динамического программирования.
  • Обработка вложенных структур данных (JSON, XML).

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

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    3

  • Сложность:

    3

Навыки

  • JavaScript

    JavaScript

Ключевые слова

#recursion

#base case

#recursive case

#stack overflow

#termination condition

Подпишись на React Developer в телеграм

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию