kotlin 基础 8 递归

《kotlin 基础 8 递归》 kotlin.jpeg

什么是递归
放羊娃

  • 为什么放羊?挣钱
  • 为什么要挣钱?生娃
  • 为什么要生娃?放羊

    《kotlin 基础 8 递归》 201409121410501017736402.jpg

阶乘

1 阶乘 1
2 阶乘 2 x 1

5 阶乘 5 x 4 x 3 x 2 x 1

fun main(arg:Array<String>) {
    var num = 5
    println(fact(5))
}

fun fact(num:Int):Int{
    if(num==1){
        return 1
    }else{
        return num * fact(num - 1)
    }
}

我们来一个 100 的阶乘

println(fact(100))

输出 0,之所以输出 0 ,因为 100 阶乘结果超出了 Int 类型所能表达的范围。那么我们将 Int 容器换成更大容器 Long 尝试一下。

fun main(arg:Array<String>) {
var num = 100
println(fact(100))
}

fun fact(num:Long):Long{
    if(num==1L){
        return 1
    }else{
        return num * fact(num - 1)
    }
}

尝试之后发现结果还是 0 ,不要急我们可以用 java 中的 BigInteger 来搞定特别的数据。

fun main(arg:Array<String>) {
var num = BigInteger("100")
println(fact(num))
}

fun fact(num:BigInteger):BigInteger{
    if(num==BigInteger.ONE){
       return BigInteger.ONE
    }else{
        return num * fact(num - BigInteger.ONE)
    }
}
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000

《kotlin 基础 8 递归》 kotlin_end.jpg

    原文作者:zidea
    原文地址: https://www.jianshu.com/p/0fc4b47490fc
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞