java递归求1-100的乘积 为什么结果为0

/*

  • 递归方法的使用(了解)

  • 1.递归方法:一个方法体内调用它自身。

    1. 方法递归包含了一种隐式的循环,它会重复执行某段代码,但这种重复执行无须循环控制。
  • 递归一定要向已知方向递归,否则这种递归就变成了无穷递归,类似于死循环。

  • /

public class RecursionTest {

public static void main(String[] args) {
    // 例1:计算1-100之间所有自然数的和
    // 方式一:

// int sum = 0;
// for (int i = 1; i <= 100; i++) {
// sum += i;
// }
// System.out.println(sum);

    RecursionTest test = new RecursionTest();
    int sum1 = test.getSum1(100);
    System.out.println(sum1);

}
public int getSum(int n){

    if (n == 1){
        return 1;
    }else {
        return n + getSum(n - 1);
    }
}

// 例2:计算1-n之间所有自然数的乘积:n!
public int getSum1(int n) {

    if (n == 1) {
        return 1;
    } else {
        return n * getSum1(n - 1);
    }

}

}

img

数据溢出了
int的最大范围还不到30亿

我的天哪,你晓得100的阶层有好大不,用java大数类型才能表示,也就是字符串来模拟数字运算

        int sum = 1;
        for (int i=1;i<100;i++){
            sum *= i;
            System.out.println(i+"\t"+ sum);
        }

1 1
2 2
3 6
4 24
5 120
6 720
7 5040
8 40320
9 362880
10 3628800
11 39916800
12 479001600
13 1932053504
14 1278945280
15 2004310016
16 2004189184
17 -288522240
18 -898433024
19 109641728
20 -2102132736
21 -1195114496
22 -522715136
23 862453760
24 -775946240
25 2076180480
26 -1853882368
27 1484783616
28 -1375731712
29 -1241513984
30 1409286144
31 738197504
32 -2147483648
33 -2147483648
34 0
35 0
36 0
37 0
38 0
39 0
40 0
41 0
42 0
43 0
44 0
45 0
46 0
47 0
48 0
49 0
50 0
51 0
52 0
53 0
54 0
55 0
56 0
57 0
58 0
59 0
60 0
61 0
62 0
63 0
64 0
65 0
66 0
67 0
68 0
69 0
70 0
71 0
72 0
73 0
74 0
75 0
76 0
77 0
78 0
79 0
80 0
81 0
82 0
83 0
84 0
85 0
86 0
87 0
88 0
89 0
90 0
91 0
92 0
93 0
94 0
95 0
96 0
97 0
98 0
99 0

Process finished with exit code 0