2017-06-11 210 views
1

我練遞歸在科特林在tailrec函數返回階乘結果,並決定創建一個因子的功能不能在科特林

fun fact(x:Int):Int{ 

    tailrec fun factTail(y:Int, z:Int=1) : Int{ 

     if (x == 0) {return z} 
     else if (x == 1) {return z} 
     else { 
      return factTail(y-1, y*z) 
     } 

    } 

return factTail(x,1) 

我只是在主調用這個函數:

fun main(args: Array<String>) { 

println("5! is ${fact(5)}") 

} 

我沒有得到任何錯誤,但我看不到結果。

回答

2
if (x == 0) {return z} 
else if (x == 1) {return z} 

這些檢查應該是對y代替xx是外fact函數的參數,並不會改變:)

你得到任何錯誤或崩潰,因爲無限遞歸調用得到優化到無限循環。