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

被折叠的 条评论
为什么被折叠?



