scala之递归

来源:互联网 发布:js和java的区别 编辑:程序博客网 时间:2024/06/08 15:05

scala中提供递归的优化

如下面的例子中是一个很常见的求和递归

scala> def getSum(list:List[Int]):Int = {     | if(list == Nil) 0     | else list.head + getSum(list.tail)     | }

这是一个经典的头递归

递归可分为头递归和尾递归

对于两者的区分请看

点击打开链接

很多语言是把尾递归转化成iteration,从而避免的操作这些大量的堆栈,

但是记得头递归是无法被这样转化的,因为头递归中每次调用这个函数例如上面的求和会生成一个"额外"的值(list.head部分),导致该堆栈跟下一个即将发生的getSum是不一样的,所以无法重用堆栈



0 0