Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Kotlin: tail recursion, tailrec, optimization, stack safety, recursion

Объясните концепцию хвостовой рекурсии в 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

    Kotlin

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

#tail recursion

#tailrec

#optimization

#stack safety

#recursion

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

  • Аватар

    Android Guru

    Anton Gulyaev

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