在Kotlin中不能返回tailrec函数的阶乘结果
我在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)
我只是主要调用这个函数:
fun main(args: Array) { println("5! is ${fact(5)}") }
我没有得到任何错误,但我也看不出结果。
if (x == 0) {return z} else if (x == 1) {return z}
这些检查应该是针对y
而不是x
, x
是外部fact
函数的参数,并且永远不会改变:)
没有错误或崩溃,因为无限递归调用被优化为无限循环。