函数中所有递归形式的调用都出现在函数的末尾的情形称为尾递归。
Kotlin 支持尾递归,这允许一些通常用循环写的算法改用递归函数来写,而无堆栈溢出的风险。 当一个函数用 tailrec 修饰符标记并满足所需的形式时,编译器会优化该递归,留下一个快速而高效的基于循环的版本。
实例:单链表的查找
官方文档实例
计算余弦的不动点(fixpoint of cosine),这是一个数学常数。 它只是重复地从 1.0 开始调用 Math.cos,直到结果不再改变,产生 0.7390851332151607 的结果。
最终代码相当于这种更传统风格的代码: