Что такое функция с хвостовой рекурсией (tailrec) в Kotlin?

Функция с хвостовой рекурсией (tailrec) в Kotlin — это рекурсивная функция, где рекурсивный вызов является последней операцией в теле функции.

Короткий ответ

Что ответить на собеседовании

Функция с хвостовой рекурсией (tailrec) в Kotlin — это рекурсивная функция, где рекурсивный вызов является последней операцией в теле функции. Это позволяет компилятору оптимизировать вызовы, преобразуя рекурсию в цикл, что предотвращает переполнение стека.

Подробный разбор

Ответ с пояснениями

Функция с хвостовой рекурсией (tailrec) в Kotlin — это рекурсивная функция, где рекурсивный вызов является последней операцией в теле функции. Это позволяет компилятору оптимизировать вызовы, преобразуя рекурсию в цикл, что предотвращает переполнение стека.

Для обозначения такой функции используется модификатор tailrec. Оптимизация действует только для вызовов, соответствующих требованиям. Не рассчитывайте на неё, если после рекурсивного вызова ещё выполняется работа; компилятор диагностирует неподходящие случаи.

Пример хвостовой рекурсии для вычисления факториала:

tailrec fun factorial(n: Int, acc: Int = 1): Int {
    require(n in 0..12) { "Для Int поддерживается n от 0 до 12" }
    return if (n <= 1) acc else factorial(n - 1, acc * n)
}

Здесь рекурсивный вызов factorial(n - 1, acc * n) — последний в функции, что позволяет оптимизировать вызов.

Пример ограничен факториалами 0..12 при начальном acc = 1: 13! уже не помещается в Int. tailrec оптимизирует стек вызовов, а не арифметику. Условия хвостовой оптимизации.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку