Intereting Posts
класс данных kotlin + проверка бонуса jsr 303 Ошибка ClassNotFoundException для проекта Kotlin (не для Android) на Android Studio Какие преимущества предлагает kotlin для XML-шаблонов Запустить один класс kotlin с основной функцией в студии android Как сделать исходный код ссылки IntelliJ в другом модуле? Kotlin: Как вставить список объектов в комнату? Как я могу установить layoutmanager в RecycleView с помощью kotlin Как преобразовать объект LocalDateTime в строку ISO, включая часовой пояс? gradle не может скомпилировать API google places Почему я не могу получить доступ к переименованию суперкласса в Котлине? Совместное использование функций расширения между Float и Double в Котлине Вызов суперкласс класса в Котлин, Супер не является выражением Получить запись с максимальным значением с карты в Котлин Каков наилучший способ объявить компонент UI в Android с Kotlin? Android – IllegalStateException: cursor.getString (idx) не должно быть null

Репликация Котлина

fun fact(x: Int): Int{ tailrec fun factTail(y: Int, z: Int): Int{ if (y == 0) return z else return factTail(y - 1, y * z) } return factTail(x, 1) } 

Может ли кто-нибудь объяснить мне, как эта функция рекурсии работает в котлин?

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

    Если мы избежим рекурсии, функция может выглядеть примерно так:

      fun fact(x: Int): Int { var result = x for (i in x - 1 downTo 1) { result *= i } return result } 

    Существует большой риск, когда вы используете рекурсию в kotlin, которая является stackoverflow.

    стек

    Как и выше рекурсия изображения работает в котлин. Будет максимальный размер для стека. Если наша функция рекурсии будет бесконечной, то она пересечет максимальный размер и приведет к исключению StackOverflow. Поэтому избегайте использования рекурсии и использования цикла