Kotlin递归

fun fact(x: Int): Int{ tailrec fun factTail(y: Int, z: Int): Int{ if (y == 0) return z else return factTail(y - 1, y * z) } return factTail(x, 1) } 

有人请向我解释一下上面的递归函数在kotlin中是如何工作的?

我将开始说tailrec关键字仅用作编译器的优化,它将尝试用循环来表示函数,而不是用递归来避免堆栈溢出的风险。

如果我们避免递归,函数可能会看起来像这样:

  fun fact(x: Int): Int { var result = x for (i in x - 1 downTo 1) { result *= i } return result }