kotlin - Kotlin 中的 tailrec 函数无法返回阶乘结果

标签 kotlin

我正在 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而不是xx是外部fact函数的参数并且永远不会改变:)

您不会遇到任何错误或崩溃,因为无限递归调用已优化为无限循环。

关于kotlin - Kotlin 中的 tailrec 函数无法返回阶乘结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44481924/

相关文章:

java - 不幸的是 MyApp 已停止。我该如何解决这个问题?

javascript - 在kotlin-js中包含js依赖项

android - 如何在TypeConverter中使用Gson将Kotlin枚举与Room存储在一起?

java - 警告 :can't find referenced class

kotlin - 如何将 Array<T?> 转换为 List<T>?

android - AWS Lambda 在 Android 上总是返回 null

generics - 使用 "any of"而不是 "all of"的 Kotlin 通用约束

Int 上的 Kotlin 引用相等行为,值在 -128 到 127 之间

android - 将图像分享到 android 中的第三方应用程序

sql - 使用 Ktor + Exposed (Kotlin) 进行数据库迁移的推荐方法是什么?