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