Kotlin相比于Java
相比于java | 描述 |
---|---|
新增 | 支持对尾递归函数的优化,提高代码性能 |
目标
目标 | 知识点 |
---|---|
掌握 | 尾递归函数的概念 |
掌握 | 对尾递归函数进行优化 |
尾递归函数
我们首先说递归函数,什么是递归函数呢?递归函数指的的在方法体内部还去调用了函数本身,就是递归。那什么又是尾递归函数呢?尾递归是一种特殊的递归函数。当递归调用是整个函数体中最后执行的语句的时候,这个递归就是尾递归。
我们举例说明,比如我们对某一个数字进行累加计算,我们先用普通的递归函数实现,参考代码:
针对以上代码的递归只是普通递归,因为代码的第21行,除了调用函数本身,还执行了一个“+”操作。
我们把上面累加操作改成尾递归的形式,参考代码:
递归的时候,容易出现的问题就是内存溢出。比如我们直接对“100000”就会出现内存溢出,参考代码:
针对以上代码我们看到,到一定时候,就出现了内存溢出。能不能去解决这样的问题呢?如果递归是尾递归,是可以在编译阶段进行尾递归优化的。python、scala都支持尾递归优化,Kotlin同样也是支持的。直接使用tailrec关键字即可,参考代码:
如果,给一个非尾递归函数添加tailrec关键字,IDEA也是会自动提示的,参考截图:
其实我们还可以进一步了解编译器,到底对尾递归函数进行了什么优化,我们查看编译转换的java文件,发现就是把递归转换成了while循环,参考截图:
网友评论