Что такое хвостовая рекурсия

Ответ

Хвостовая рекурсия — это частный случай рекурсии, когда рекурсивный вызов является последней операцией в функции. В этом случае стек вызовов не растёт, так как компилятор/интерпретатор может оптимизировать его в итерацию.

Пример (не хвостовая рекурсия):

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 хвостовая рекурсия поддерживается, но не во всех движках. Для гарантированной оптимизации лучше использовать циклы.