Java 为什么不是';这个阿克曼函数不起作用吗?

Java 为什么不是';这个阿克曼函数不起作用吗?,java,recursion,Java,Recursion,考虑到(2,2)的输入,我希望返回7。程序没有得到正确的输出,而是在第16行返回java.lang.StackOverflowerError package main; import java.math.BigInteger; public class Ackermann { public static void main(String[] args) { System.out.println(ack(BigInteger.valueOf(2),BigInteger

考虑到(2,2)的输入,我希望返回7。程序没有得到正确的输出,而是在第16行返回java.lang.StackOverflowerError

package main;

import java.math.BigInteger;

public class Ackermann {

    public static void main(String[] args) {
        System.out.println(ack(BigInteger.valueOf(2),BigInteger.valueOf(2)));

    }

    public static BigInteger ack(BigInteger a, BigInteger b) {
        BigInteger ans;
        if (a.equals(0)) ans = b.add(BigInteger.ONE);
        else if (b.equals(0)) ans = ack(a.subtract(BigInteger.ONE),BigInteger.valueOf(1));
        else ans = ack(a.subtract(BigInteger.ONE), ack(a,b.subtract(BigInteger.ONE))); //line 16
        return (ans);
    }

}
我已经将最大堆栈大小一直增加到2GB,但它仍然在(2,2)的小输入上抛出错误。在我开始使用大整数而不是长整数之前,输入(2,2)一切都进行得很好,但现在是一团糟。

而不是
equals(0)
你必须使用
equals(biginger.ZERO)

否则,您将一个BigInteger与一个始终为false的整数(自动装箱)进行比较。

而不是
等于(0)
您必须使用
等于(BigInteger.ZERO)

否则,您将一个BigInteger与一个始终为false的整数(自动装箱)进行比较。

而不是
等于(0)
您必须使用
等于(BigInteger.ZERO)

否则,您将一个BigInteger与一个始终为false的整数(自动装箱)进行比较。

而不是
等于(0)
您必须使用
等于(BigInteger.ZERO)


否则,您会将一个BigInteger与一个始终为false的整数(自动装箱)进行比较。

您能发布此项的全部代码吗,很难看到哪一行是第17行?您能发布此项的全部代码吗,很难看到哪一行是第17行?您能发布此项的全部代码吗,很难看出哪一行是第17行?你能发布这段代码的全部内容吗?很难看出哪一行是第17行?