Math.add()的纯尾递归实现仍会抛出stackoverflow

时间:2014-04-14 05:03:48

标签: java recursion

我正在创建一个实现java Math类的类,并且我用递归方法覆盖了add方法。我认为我的方法是纯尾递归并且不会抛出堆栈溢出,但是我不能添加10000和10000而不抛出它。

public int add(int a, int b) {
    if (b == 0)
        return a;
    return add(increase(a), decrease(b));
}

增加和减少方法只需要数字,加/减1,然后返回结果。我不认为这应该创建任何堆栈,因为该方法不必等待连续调用完成的任何计算。但我显然错了。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

Java编译器不支持尾调用优化。有关详细信息,请参阅this questionthis question