Принцип работы хвостовой рекурсии заключается в том, что любой рекурсивный вызов является последней операцией перед возвратом из функции. 14
В такой ситуации сохранение контекста уже не имеет значения — ни параметры, ни локальные переменные уже использоваться не будут, а адрес возврата уже находится в стеке. 1 Поэтому вместо полноценного рекурсивного вызова функции можно просто заменить значения параметров в стеке и передать управление на точку входа. 1
До тех пор, пока исполнение будет идти по этой рекурсивной ветви, будет, фактически, выполняться обычный цикл. 1 Когда рекурсия завершится (то есть исполнение пройдёт по терминальной ветви и достигнет команды возврата из функции), возврат произойдёт сразу в исходную точку, откуда произошёл вызов рекурсивной функции. 1 Таким образом, при любой глубине рекурсии стек переполнен не будет. 1