Комментарии 2
Эта функция нам ещё пригодится позднее, тогда же рассмотрим и некоторые свойства
TailRec. Важно понимать, что на хранение такой структуры данных всё равно будет потребляться память, размер которой пропорционален количеству рекурсивных вызовов. Однако данные будут размещаться уже не в ограниченном стеке, а в динамической памяти (куче).
В данном случае описывается скорее особенность Scala, а не рекурсии как таковой. Не во всех системах программирования рекурсивные вызовы занимают память именно в стеке.
Рекурсию не всегда удаётся распознать, тем более косвенную. Но не только Scala - многие другие языки не заморачиваются с оптимизацией рекурсии. Так что эта тема касается не столько особенностей Scala, сколько борьбе со стандартной проблемой маленького стека, характерной для большинства современных компьютеров и ЯП.

Рекурсивные типы. Часть 6. Пересвёртка на практике