Java递归代码

Java递归代码,java,Java,当我运行这段代码时,最后两个测试返回0,我知道它们应该是大数字,这是为什么?如何计算最后两个的值???您遇到了算术溢出。整数只能存储介于-2^31和2^31-1之间的值。要处理这么大的数字,您需要更合适的数据类型,例如BigInteger 在某个点上,您的数字超过了int类型的最大值。然后乘法的结果变成负数,然后变成-0 public class Temp { public static void main(String[] args) { System.out.prin

当我运行这段代码时,最后两个测试返回0,我知道它们应该是大数字,这是为什么?如何计算最后两个的值???

您遇到了算术溢出。整数只能存储介于-2^31和2^31-1之间的值。要处理这么大的数字,您需要更合适的数据类型,例如BigInteger

在某个点上,您的数字超过了int类型的最大值。然后乘法的结果变成负数,然后变成-0

public class Temp {
    public static void main(String[] args) {
        System.out.println(recursion(1, 100));
        System.out.println(recursion(4, 5));
        System.out.println(recursion(99, 100));
        System.out.println(recursion(100, 100));
    }

    public static int recursion(int m, int n) {
        int number = 0;
        if (m == 1) {
            number = ((2 * n) - 1);
        } else {
            number = 2 * recursion(m - 1, n - 1);
        }
        return number;
    }
}
下一步,将它们相乘m=33,n=34:

m = 31, n = 32 : number = -1073741824
m = 32, n = 33 : number = -2147483648
也就是0


从这一点开始,一切都是0。

后两个是什么?可能是最后两个方法调用:后两个结果您可以通过调试代码轻松找到原因。只要在return语句上添加一个断点。我能为每个int替换BigInteger吗?哦,对不起,你在5分钟前开始回答时,你的答案不存在。在你的情况下,结果增长为~2^m,这真的很快。确实需要吗?BigInteger类将算术运算作为方法实现,因此,这里没有m-1,而是m.subtractBigInteger.ONE-看一看,它说不能在基元类型int上调用subtractBigInteger,所以我尝试了不同的方法,但它仍然给我一个错误,你知道这个问题的最终答案是什么吗?
System.out.println((-1073741824) * (-2147483648));