kotlin 基础 8 递归

作者: zidea | 来源:发表于2019-04-05 09:59 被阅读5次
    kotlin.jpeg

    什么是递归
    放羊娃

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


      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_end.jpg

    相关文章

      网友评论

        本文标题:kotlin 基础 8 递归

        本文链接:https://www.haomeiwen.com/subject/sqfciqtx.html