37. 尾递归

当编程中使用到递归的时候,由于栈的原因,超出一定的递归次数,经常会出现栈被用完的错误(栈溢出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)
}
运行结果

这就是尾递归的优化。
如果不是尾递归,加上修饰符也没有作用。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容