Ответ
Хвостовая рекурсия — это частный случай рекурсии, когда рекурсивный вызов является последней операцией в функции. В этом случае стек вызовов не растёт, так как компилятор/интерпретатор может оптимизировать его в итерацию.
Пример (не хвостовая рекурсия):
function factorial(n) {
if (n <= 1) return 1;
return n * factorial(n - 1); // Умножение после вызова
}
Пример (хвостовая рекурсия):
function factorial(n, acc = 1) {
if (n <= 1) return acc;
return factorial(n - 1, n * acc); // Вызов — последняя операция
}
В ES6 хвостовая рекурсия поддерживается, но не во всех движках. Для гарантированной оптимизации лучше использовать циклы.