为什么此方法导致StackOverflowError?

时间:2019-02-27 11:51:56

标签: scala recursion

下面的类中的方法假定y为正:

class Calculator {
  def addPos(x: Int, y: Int): Int = {
    if (y == 0) x
    else {
      val temp: Int = x + 1
      if (temp < x) throw new OverflowException
      else addPos(temp, y - 1)
    }
  }
}

它是尾部递归,并在每次递归中从xy加1,直到y为0。超过Int.MaxValue时也会抛出。我知道此函数有一个更简单的实现,不需要递归,但是,我想找出为什么此方法在执行时会引起StackOverflowError的问题:

val newCalc = new Calculator
println(newCalc.addPos(0, Int.MaxValue))

我认为,由于它是尾递归的,因此该方法不会导致SOError。

0 个答案:

没有答案