【问题标题】:Can't return factorial result in tailrec function in Kotlin无法在 Kotlin 的 tailrec 函数中返回阶乘结果
【发布时间】:2017-06-11 08:41:16
【问题描述】:

我在 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)}")

}

我没有收到任何错误,但我也看不到结果。

【问题讨论】:

    标签: kotlin


    【解决方案1】:
    if (x == 0) {return z}
    else if (x == 1) {return z}
    

    这些检查应该针对y 而不是xx 是外部fact 函数的参数并且永远不会改变:)

    由于无限递归调用已优化为无限循环,因此不会出现错误或崩溃。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-16
      • 1970-01-01
      • 2010-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-21
      相关资源
      最近更新 更多