企业如何免费做网站,百度网址大全下载到桌面,贺卡制作网页,北京网站建设中心函数式编程中#xff0c;重要的概念 尾递归。 当一个函数#xff0c;在函数最后调用 自身#xff0c;称为 尾递归#xff0c;是一种特殊的递归函数。 在JVM中#xff0c;每次方法调用时#xff0c;都会产生新的栈帧#xff08;stack frame#xff09;#xff0c;消耗栈…函数式编程中重要的概念 尾递归。 当一个函数在函数最后调用 自身称为 尾递归是一种特殊的递归函数。 在JVM中每次方法调用时都会产生新的栈帧stack frame消耗栈内存。当 调用层级过多时就会产生 StackOverflowError 错误。 尾递归函数 可以避免 StackOverflowError 的风险。原理是 通过编译器优化 为 循环 或 GOTO跳转代替 原来递归调用。
Kotlin 使用 tailrec 声明尾递归函数。
举例 计算 1 ~ N 的数之和。 tailrec fun sum(top: Long, initValue: Long): Long {return if (top 0) {initValue} else {sum(top - 1, initValue top)}
}fun main(args: ArrayString) {// 计算 100万 数字累加之和println(sum: ${sum(1_000_000L, 0)})
}说明
1. idea 查看 编译代码Show Kotlin Bytecode - Decompile 2. 尝试把 tailrec 去掉运行会 java.lang.StackOverflowError 错误
文档
Tail recursive functions | KotlinTail call