好吧,我得到这个所有递归更实用,因为你没有改变迭代中任何对象的状态.然而,没有什么能阻止你在scala中这样做.
var magoo = 7;
def mergeSort(xs: List[Int]): List[Int] = {
...
magoo = magoo + 1
mergeSort(xs1, xs2);
}
Run Code Online (Sandbox Code Playgroud)
事实上,你可以像在Java中一样在Scala中进行递归.那么可以公平地说Scala只是通过使用模式匹配来简化编写简洁的递归吗?就像没有什么能阻止我在Java中编写任何我可以在Scala中编写的无状态递归代码?
关键在于Scala复杂的递归可以用更简洁的代码实现.就这样.正确?
有些东西会阻止你在Java中编写递归代码:尾部调用消除(TCE).在Java中,可以在深度递归时获得StackOverflowException,而在Scala中,尾部调用将被优化(内部表示为循环).
那么可以公平地说Scala只是通过使用模式匹配来简化编写简洁的递归吗?
我认为在Scala中这两个概念是相互正交的.