Kotlin编程程序员Android技术知识

kotlin 基础 8 递归

2019-04-05  本文已影响5人  zidea
kotlin.jpeg

什么是递归
放羊娃

阶乘

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
上一篇下一篇

猜你喜欢

热点阅读