KotlinKotlin精讲-黑马程序员(原创)禅与计算机程序设计艺术

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

2017-12-04  本文已影响206人  739c8d412b4c

Kotlin相比于Java

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

目标

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

尾递归函数

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

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

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

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

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

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

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

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

上一篇 下一篇

猜你喜欢

热点阅读