kotlin 基礎 8 遞迴

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) } }

kotlin_end.jpg