Вопрос проверяет понимание механизма работы стека вызовов в JavaScript и ограничений рекурсии.
JavaScript использует стек вызовов для отслеживания выполнения функций. Каждый раз, когда вызывается функция, создается новый фрейм (execution context), который помещается на вершину стека. Когда функция завершается, ее фрейм удаляется. При рекурсии каждый новый вызов добавляет фрейм, и стек растет.
Стек имеет ограниченный размер (обычно около 10 000 фреймов в браузерах). Если рекурсия слишком глубокая, стек заполняется, и новый фрейм не может быть добавлен. Это вызывает ошибку RangeError: Maximum call stack size exceeded.
function factorial(n) {
if (n === 0) return 1;
return n * factorial(n - 1);
}
// Вызов с большим числом
console.log(factorial(100000)); // RangeError: Maximum call stack size exceededВывод: рекурсия удобна для задач с древовидными структурами, но для глубоких вычислений лучше использовать итеративные подходы или оптимизировать код.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию