kotlin精讲-第2章(11)kotlin函数加强_下

作者: 739c8d412b4c | 来源:发表于2017-12-04 18:34 被阅读206次

    Kotlin相比于Java

    相比于java 描述
    新增 支持对尾递归函数的优化,提高代码性能

    目标

    目标 知识点
    掌握 尾递归函数的概念
    掌握 对尾递归函数进行优化

    尾递归函数

    我们首先说递归函数,什么是递归函数呢?递归函数指的的在方法体内部还去调用了函数本身,就是递归。那什么又是尾递归函数呢?尾递归是一种特殊的递归函数。当递归调用是整个函数体中最后执行的语句的时候,这个递归就是尾递归。

    我们举例说明,比如我们对某一个数字进行累加计算,我们先用普通的递归函数实现,参考代码:

    针对以上代码的递归只是普通递归,因为代码的第21行,除了调用函数本身,还执行了一个“+”操作。

    我们把上面累加操作改成尾递归的形式,参考代码:

    递归的时候,容易出现的问题就是内存溢出。比如我们直接对“100000”就会出现内存溢出,参考代码:

    针对以上代码我们看到,到一定时候,就出现了内存溢出。能不能去解决这样的问题呢?如果递归是尾递归,是可以在编译阶段进行尾递归优化的。python、scala都支持尾递归优化,Kotlin同样也是支持的。直接使用tailrec关键字即可,参考代码:

    如果,给一个非尾递归函数添加tailrec关键字,IDEA也是会自动提示的,参考截图:

    其实我们还可以进一步了解编译器,到底对尾递归函数进行了什么优化,我们查看编译转换的java文件,发现就是把递归转换成了while循环,参考截图:

    相关文章

      网友评论

      本文标题:kotlin精讲-第2章(11)kotlin函数加强_下

      本文链接:https://www.haomeiwen.com/subject/fnaxixtx.html