Я получаю 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));
}
}
Я понимаю слишком много рекурсивных вызовов. Есть ли способ избавиться от этой ошибки?
Спасибо.