Java 递归检查
我不懂这个密码有人能帮我吗? 我想知道为什么120乘以第一个返回号码(1302)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
公共类递归{
公共静态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