Проверяет понимание механизма рекурсии, глубины стека вызовов и риска переполнения стека.
Рекурсия — это техника, при которой функция вызывает саму себя для решения подзадачи. Глубина рекурсии — это количество последовательных вызовов функции до достижения базового случая (условия выхода). Каждый вызов создает новый фрейм в стеке вызовов (call stack), который хранит локальные переменные и адрес возврата.
function factorial(n) {
if (n === 0) return 1; // базовый случай
return n * factorial(n - 1); // рекурсивный вызов
}
console.log(factorial(5)); // 120В этом примере глубина рекурсии равна 5 (вызовы для n=5,4,3,2,1,0). Каждый вызов ждет результата следующего, пока не достигнет базового случая.
Если глубина рекурсии слишком велика (например, factorial(100000)), стек может переполниться, так как память ограничена. Это называется stack overflow. В разных языках и средах ограничения разные (обычно несколько тысяч вызовов).
Рекурсия удобна для задач с вложенной структурой, но требует осторожности с глубиной. Для больших глубин лучше использовать итеративные подходы или хвостовую рекурсию (если язык поддерживает оптимизацию).