Я думаю, что Tail-recursive действительно полезен в функциональном языке программирования. Как насчет С?
- Поддерживает ли язык C или компилятор устранение хвостовых вызовов?
- Создает ли программа новый кадр стека для нового вызова?
Из вики:
Хвостовые вызовы могут быть реализованы без добавления нового кадра стека в стек вызовов. Большая часть фрейма текущей процедуры больше не нужна, и ее можно заменить фреймом хвостового вызова, соответствующим образом модифицированным (аналогично оверлею для процессов, но для вызовов функций).
Затем программа может перейти к вызванной подпрограмме. Создание такого кода вместо стандартной последовательности вызовов называется удалением хвостовых вызовов.