Функции с хвостовой рекурсией в Kotlin
В языке программирования Kotlin поддерживается такой стиль функционального программирования, как «хвостовая рекурсия». Какие возможности это предоставляет?
Приведем пример:
Вышеуказанный код высчитает fixpoint косинуса, не являющегося математической константой. Он просто постоянно будет вызывать Math.cos, начиная с 1.0 и до того момента, пока результат не поменяется, приняв значение 0.7390851332151607. Таким образом, можно сказать, что код выше будет эквивалентен следующему коду, написанному в более традиционном стиле:
Чтобы соответствовать требованиям tailrec-модификатора, функция должна сама себя вызывать в качестве последней операции, которую эта функция предпринимает. И вы не сможете применять хвостовую рекурсию, если есть еще какой-нибудь код после вызова этой рекурсии. Вдобавок к этому, нельзя использовать хвостовую рекурсию внутри блоков try/catch/finally. Также стоит отметить, что на момент написания материала хвостовая рекурсия поддерживалась лишь в backend JVM (виртуальной машины Java).
По материалам https://kotlinlang.ru/