kotlin 基础 8 递归
2019-04-05 本文已影响5人
zidea
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