package bilibili
import scala.annotation.tailrec
/**
* @author 王子健
* @date 2021/7/19 16:31
* @VERSION 1.0
*/
object digui {
//阶乘
def jiecheng(n:Int):Int={
if(n==0) return 1
n*jiecheng(n-1)
}
//尾递归阶乘
def jiecheng2(n:Int):Int={
@tailrec
def loop(n :Int , res :Int):Int={
if(n==0) return res
loop(n-1,n*res)
}
loop(n,1)
}
def main(args: Array[String]): Unit = {
//println(jiecheng(5))
println(jiecheng2(5))
}
}
递归调用时,每次需要n-1 的返回结果,每次都必须保留堆中的对象

尾递归调用时,不需要n-1 的运行返回结果,而是将他们保存在res中,每次直接覆盖n-1 对象。

理解尾递归优化:Scala中的阶乘实现
本文探讨了Scala中阶乘的两种实现方式:常规递归与尾递归。通过示例代码展示了如何使用尾递归优化减少内存开销,解释了尾递归如何避免堆栈溢出问题,从而提高程序效率。
386

被折叠的 条评论
为什么被折叠?



