Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад

Объясните концепцию хвостовой рекурсии в Kotlin.

Этот вопрос проверяет понимание оптимизации рекурсивных функций в Kotlin с использованием tailrec, а также их применения для предотвращения ошибок переполнения стека.

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

Хвостовая рекурсия (tail recursion) — это тип рекурсии, где рекурсивный вызов является последней операцией функции. В Kotlin её можно оптимизировать с помощью модификатора tailrec, что позволяет компилятору преобразовать рекурсию в цикл и избежать переполнения стека. Подходит для задач с большим числом рекурсивных вызовов.

Длинный ответ

Что такое хвостовая рекурсия?
Это техника, в которой последний оператор функции — это вызов самой себя. В отличие от обычной рекурсии, хвостовая рекурсия не требует хранения промежуточных результатов на стеке вызовов, что делает её безопасной для большого числа итераций.

 

Оптимизация в Kotlin:

- Kotlin предоставляет модификатор tailrec, который преобразует хвостовую рекурсию в цикл на этапе компиляции.

- Это предотвращает переполнение стека при большом числе рекурсивных вызовов.

 

Пример:

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

fun main() {
    val result = factorial(5)
    println(result) // Вывод: 120
}

 

Как работает пример:

- factorial принимает два аргумента: n (число) и acc (аккумулятор).

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

- Компилятор преобразует этот код в эквивалентный цикл, устраняя вызовы стека.

 

Ограничения:

- Рекурсивный вызов должен быть последним выражением в функции.

- Хвостовая рекурсия не подходит для задач, где требуется сохранить промежуточное состояние.


Используйте tailrec, когда требуется безопасная и эффективная рекурсия. Это полезно для задач вроде вычисления факториала, чисел Фибоначчи или обработки больших данных рекурсивным образом.

  • Аватар

    Android Guru

    Anton Gulyaev

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    2

  • Сложность:

    8

Навыки

  • Kotlin

Ключевые слова

#tail recursion

#tailrec

#optimization

#stack safety

#recursion

Подпишись на Android Developer в телеграм

  • Аватар

    Android Guru

    Anton Gulyaev

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.