Scala递归没有副作用

Mor*_*ive 3 recursion scala

好吧,我得到这个所有递归更实用,因为你没有改变迭代中任何对象的状态.然而,没有什么能阻止你在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复杂的递归可以用更简洁的代码实现.就这样.正确?

om-*_*nom 5

有些东西会阻止你在Java中编写递归代码:尾部调用消除(TCE).在Java中,可以在深度递归时获得StackOverflowException,而在Scala中,尾部调用将被优化(内部表示为循环).

那么可以公平地说Scala只是通过使用模式匹配来简化编写简洁的递归吗?

我认为在Scala中这两个概念是相互正交的.