1)代码示例
object TestRecursion {
    def main(args: Array[String]): Unit = {
        var data = 1 to 10
        println(sum1(data))
        println(sum2(data,0))
    }

    // 普通递归
    def sum1(args:Seq[Int]):Int ={
        if (args.isEmpty)
             0
        else {
            args.head + sum1(args.tail)
        }
    }

    // 尾递归
    def sum2(args:Seq[Int],sums:Int):Int ={
        if (args.isEmpty)
            sums
        else {
            sum2(args.tail,sums + args.head)
        }
    }
}

计算结果
在这里插入图片描述

说明:
普通递归尾部可以参与计算,但是每次递归都需要执行压栈,这样会造成栈溢出
尾递归尾部不参与计算,只做函数调用,同时调用的值是算的结果,不会造成栈溢出

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐