Java 递归检查

Java 递归检查,java,recursion,instance,Java,Recursion,Instance,我不懂这个密码有人能帮我吗? 我想知道为什么120乘以第一个返回号码(1302) 公共类递归{ 公共静态void main(字符串[]args){ 系统输出打印LN(事实(5)); } //事实 公共静态长事实(int n){ 如果(n以下是发生的情况: main calls fact(5) fact(5) sees that n is above 1, and calls fact(4) fact(4) sees that n is above 1, and calls

我不懂这个密码有人能帮我吗? 我想知道为什么120乘以第一个返回号码(1302)

公共类递归{
公共静态void main(字符串[]args){
系统输出打印LN(事实(5));
}
//事实
公共静态长事实(int n){

如果(n以下是发生的情况:

main calls fact(5)
    fact(5) sees that n is above 1, and calls fact(4)
        fact(4) sees that n is above 1, and calls fact(3)
            fact(3) sees that n is above 1, and calls fact(2)
                fact(2) sees that n is above 1, and calls fact(1)
                    fact(1) sees that n is 1, and returns 1302
                fact(2) returns 2 * 1302
            fact(3) returns 3 * 2 * 1302
        fact(4) returns 4 * 3 * 2 * 1302
    fact(5) returns 5 * 4 * 3 * 2 * 1302
main prints 5 * 4 * 3 * 2 * 1302
请注意,
5*4*3*2=120
,这就是打印的号码。

展开通话:

fact(5)
5 * fact(5-1)
5 * fact(4)
5 * 4 * fact(4-1)
5 * 4 * fact(3)
5 * 4 * 3 * fact(3-1)
5 * 4 * 3 * fact(2)
5 * 4 * 3 * 2 * fact(2-1)
5 * 4 * 3 * 2 * fact(1)
5 * 4 * 3 * 2 * 1302
120 * 1302
现在展开堆栈

n = 2 
return 2 * 1302 (2604)
n= 3 
return 3* 2604 (5208)
。。。 等等

fact(5);
     5 * fact(4);
fact(4);
     4 * fact(3);
fact(3);
     3 * fact(2);
fact(2);
     2 * fact(1);
fact(1);
     1302

那么
5*4*3*2*1302

为什么在基本情况下返回
1302
而不是
1
?我只是在试验这个代码。但是有人知道它为什么会这样做吗?@hassanhafeez请转到上面提供的链接。我已经回答了。@hassanhafeez因为你递归调用
事实(n-1)
因此它将在某个点到达
n=1
。如果调用
fact(3)
,它将执行=>
3*fact(2)
fact(2)=2*fact(1)
fact(1)=1302
(在您的情况下)所以
fact(3)=3*2*1302
啊,我明白了,现在说得通了!谢谢。4个相同的答案。但这一个格式最好,也最容易阅读。
n = 2 
return 2 * 1302 (2604)
n= 3 
return 3* 2604 (5208)
fact(5);
     5 * fact(4);
fact(4);
     4 * fact(3);
fact(3);
     3 * fact(2);
fact(2);
     2 * fact(1);
fact(1);
     1302