我收到以下代码的 StackOverflowError(线程“main”java.lang.StackOverflowError 中的异常)。但该程序适用于 m=3、n=3(或其他较低值)但不适用于 m=4 和 n=2 或 3。
public class AckermannFunction
{
static BigInteger One = BigInteger.ONE;
static BigInteger Zero = BigInteger.ZERO;
static BigInteger ackmnFun(BigInteger m, BigInteger n)
{
if (m.equals(Zero))
return n.add(One);
if (n.equals(Zero))
return ackmnFun(m.subtract(One), One);
return ackmnFun(m.subtract(One), ackmnFun(m, n.subtract(One)));
}
public static void main(String[] args)
{
BigInteger m = new BigInteger("4");
BigInteger n = new BigInteger("3");
System.out.println(ackmnFun(m, n));
}
}
我理解的递归调用太多了。有没有办法摆脱这个错误?
谢谢。