下面的类中的方法假定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)
}
}
}
它是尾部递归,并在每次递归中从x
到y
加1,直到y
为0。超过Int.MaxValue
时也会抛出。我知道此函数有一个更简单的实现,不需要递归,但是,我想找出为什么此方法在执行时会引起StackOverflowError的问题:
val newCalc = new Calculator
println(newCalc.addPos(0, Int.MaxValue))
我认为,由于它是尾递归的,因此该方法不会导致SOError。