В kotlin функция tailroid tail возвращает 0

Я попытался использовать этот учебник по учебнику youtube . Я имею функцию следующим образом:

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

и эта функция вызывается в oncreate как:

 var abc = fact(5) Log.i(TAG, "5! = $abc") 

Когда приложение выводит журнал, оно выглядит следующим образом:

 I/MainActivity: 5! = 0 

Может ли кто-нибудь указать, что здесь не так.

    Вы правильно кодируете код, и вы определенно получаете 0 для множественного результата больше MAX_SIZE от значения Int . Вы можете получить размер Int max с помощью:

     Int.MAX_VALUE 

    Итак, если этот y * x пересекает Int.MAX_VALUE = 2147483647 , fun вернет вам 0 . Для числа, большего чем 16 func, будет возвращено минус-число, а для более 33 оно вернет 0 . вы можете проверить это:

     for(x in 5..50){ log.i("$x! : ${fact(x)}") } 

    Таким образом, вы можете справиться с этим, изменив переменную от Int до Long

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

    Но Лонг также имеет свои ограничения. Надеюсь, вы поняли.

    Intereting Posts
    Предельная функция в Котлине Kotlin: Как асинхронно ждать список одинаковых методов? Как передать String в Int и Long? Kotlin: Как получить доступ к Attrs для CustomView Loop JPA-массив без запуска Lob-выборки Как отобразить уведомление в приложении, которое не хранится в ящике уведомлений à la Snapchat Как я могу запустить один Android-тест с помощью Kotlin? GMaps Android API и GeoJson, как покрыть весь мир дырой Модуль библиотеки Android, разработанный в Kotlin, экспортируется в приложение Java, вызывающее неудачное разрешение: Lkotlin / jvm / internal / Intrinsics Заводские привязки Kodein бросают NotFoundException Как создать объект JavaScript для объекта Kotlin? Ошибка кинжала 2: зависимость "не может быть предоставлена ​​без конструктора @Inject" Создание экземпляра массива в Котлине Пользовательский десериализатор для любого списка в Джексоне Как проверить видимость программной клавиатуры в Android?