当编程中使用到递归的时候,由于栈的原因,超出一定的递归次数,经常会出现栈被用完的错误(栈溢出stack overflow)。在 kotlin 编码中,我们可以使用优化尾递归为迭代的方式,提升编译器运算的能力。
看一下下面这段代码
fun main(args: Array<String>) {
println(node(100000))
}
fun node(i: Int): Int {
if (i % 27 == 0) {
println(i.toString())
}
if (i == 0) return -1
return node(i-1)
}
运行会报错
如果在 fun node(i:Int) 前加上一个 tailrec 修饰符,就可以正常运行到结束了。
tailrec fun node(i: Int): Int {
if (i % 27 == 0) {
println(i.toString())
}
if (i == 0) return -1
return node(i-1)
}
这就是尾递归的优化。
如果不是尾递归,加上修饰符也没有作用。