Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗ktSpIlTl 117 of 299 menu
◀ ▶

Хвостовая рекурсия в Kotlin

Рекурсивная функция снова вызывает сама себя. Если таких вызовов много подряд, стек растет. Когда последнее действие в ветке - только следующий рекурсивный вызов, компилятор Kotlin может заменить цепочку на цикл.

Такой прием называют хвостовой рекурсией. Ее отмечают словом tailrec перед fun. Накопитель передают параметром, а не ждут после возврата из вложенного вызова:

tailrec fun sumDown(n: Int, acc: Int = 0): Int { return if (n == 0) { acc } else { sumDown(n - 1, acc + n) } }

Ключевое слово tailrec требует, чтобы рекурсивный вызов стоял последним вычислением в каждой ветке. Сумма чисел от 1 до n при этом считается без отдельного цикла в исходнике:

fun main() { println(sumDown(5)) }

Напишите рекурсивную функцию, которая считает факториал числа n в параметре acc. Для 5 выведите 120.

Сделайте функцию, которая по списку строк возвращает их общую длину, уменьшая список рекурсивно. Проверьте на трех коротких словах.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить