Как будешь действовать, если стек вызовов будет заполнен?
Массивы и структуры данных
Если стек вызовов переполнен (`Maximum call stack size exceeded`), нужно найти причину — обычно бесконечную/слишком глубокую рекурсию — и исправить: добавить базовый случай, переписать в итерацию или разбить работу.
Причина переполнения
Стек вызовов ограничен по размеру. Переполнение обычно вызвано:
- Бесконечной рекурсией (нет базового случая).
- Слишком глубокой рекурсией (большая глубина).
function recurse() { recurse(); } // RangeError: Maximum call stack size exceededКак действовать
1. Найти причину
Прочитать stack trace — он покажет повторяющуюся функцию. Проверить рекурсию на базовый случай:
function factorial(n) {
if (n <= 1) return 1; // базовый случай — обязателен!
return n * factorial(n - 1);
}2. Исправить рекурсию
- Добавить/проверить базовый случай.
- Убедиться, что рекурсия приближается к нему.
3. Переписать в итерацию
Глубокую рекурсию заменить циклом (использует память кучи, а не стек):
function sum(arr) {
let total = 0;
for (const x of arr) total += x; // без рекурсии
return total;
}4. Разбить работу / асинхронность
Для очень глубокой обработки — обрабатывать частями через setTimeout/очередь (стек освобождается между итерациями).
5. Явный стек
Обход деревьев через явный стек-массив вместо рекурсии.
Коротко для собеседования
При переполнении стека (Maximum call stack size exceeded) — читаю stack trace, нахожу бесконечную/глубокую рекурсию, проверяю базовый случай и его достижимость. Исправляю: добавляю базовый случай, переписываю рекурсию в итерацию (цикл/явный стек) или разбиваю работу через setTimeout/очередь, чтобы стек освобождался.