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;
    }
}

当我运行这段代码时,最后两个测试返回 0,我知道它们应该是大数字,这是为什么呢?我怎样才能弄清楚最后两个的价值?

4

2 回答 2

7

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

于 2013-04-09T05:15:43.977 回答
0

在某些时候,您的数量超过了 int 类型的最大值。然后乘法的结果变为负数,然后 - 零。

m = 31, n = 32 : number = -1073741824
m = 32, n = 33 : number = -2147483648

下一步将它们相乘(m = 33,n = 34):

System.out.println((-1073741824) * (-2147483648));

这是0。

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

于 2013-04-09T05:20:26.820 回答