gpt4 book ai didi

android - 在 kotlin android tailrec 函数中返回 0

转载 作者:行者123 更新时间:2023-11-29 01:06:24 29 4
gpt4 key购买 nike

我尝试使用本教程 youtube tutorial .我有一个功能如下:

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

谁能指出这里有什么问题。

最佳答案

您的代码是正确的,对于超过Int 值的MAX_SIZE 的多个结果,您肯定会得到0。您可以获得 Int 最大大小:

Int.MAX_VALUE

因此,如果这个 y * x 穿过 Int.MAX_VALUE = 2147483647,fun 将返回 0 给你。对于大于 16 的数字,函数将返回负数,对于大于 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)
}

但Long也有其局限性。希望你明白这一点。

关于android - 在 kotlin android tailrec 函数中返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46763795/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com