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

このコードを実行すると、最後の 2 つのテストで 0 が返され、それらが大きな数値であることがわかっているのはなぜですか? 最後の2つの値をどのように把握できますか??

4

2 に答える 2

0

ある時点で、int 型の最大数を超えました。次に、乗算の結果が負になり、次に-0になります。

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 に答える