上面我们介绍了递归,以及头递归,但是往往在FP中发挥作用的是尾递归,所以我们讲解尾递归,先看前面改造后的
def getSum2(list:List[Int]):Int = {
def sumHelp(list:List[Int],sum:Int):Int={
if(list == Nil) sum
else sumHelp(list.tail, sum + list.head)
}
sumHelp(list,0)
}
这个就是尾递归,跟头递归的区别--把计算的结果扔给下一个的下一次函数中(不像头递归,把结果放在该次函数调用的堆栈里),这个有些像带state的pure函数(在FP IN SCALA有讲道),这个尾递归会被优化