scala中提供递归的优化
如下面的例子中是一个很常见的求和递归
scala> def getSum(list:List[Int]):Int = {
| if(list == Nil) 0
| else list.head + getSum(list.tail)
| }
这是一个经典的头递归
递归可分为头递归和尾递归
对于两者的区分请看
很多语言是把尾递归转化成iteration,从而避免的操作这些大量的堆栈,
但是记得头递归是无法被这样转化的,因为头递归中每次调用这个函数例如上面的求和会生成一个"额外"的值(list.head部分),导致该堆栈跟下一个即将发生的getSum是不一样的,所以无法重用堆栈