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 } 

在kotlin中使用递归时,存在很大的风险。

如上图像递归在kotlin中起作用。 堆栈会有一些最大的大小,如果我们的递归函数是无限的,那么它会跨越最大的大小,并导致StackOverflowexception。 所以避免使用递归,而是使用循环