我正在 Kotlin 中练习递归,并决定创建一个阶乘函数
fun fact(x:Int):Int{
tailrec fun factTail(y:Int, z:Int=1) : Int{
if (x == 0) {return z}
else if (x == 1) {return z}
else {
return factTail(y-1, y*z)
}
}
return factTail(x,1)
我只是在 main 中调用这个函数:
fun main(args: Array<String>) {
println("5! is ${fact(5)}")
}
我没有收到任何错误,但也看不到结果。
最佳答案
if (x == 0) {return z}
else if (x == 1) {return z}
这些检查应该针对y
而不是x
,x
是外部fact
函数的参数并且永远不会改变:)
您不会遇到任何错误或崩溃,因为无限递归调用已优化为无限循环。
关于kotlin - Kotlin 中的 tailrec 函数无法返回阶乘结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44481924/