猿问

java递归原理求高人解惑

int i=1;
int Test(int n){
System.out.println("*****************"+(i++));
int result =0;
if(n==1)
return 1;
result = Test(n-1)*n;
System.out.println(result+" "+n);
return result;
}
我进行调试,比如n=8,只打印第一条语句,打了八次,当n=1时返回结果1,跳出方法,然后继续执行,此时n变为2,为何?再然后只执行第二条打印语句的内容,为何?直到n变为8。求解啊...

慕桂英4014372
浏览 729回答 3
3回答

沧海一幻觉

1.因为在这一行你再次调用了这个方法,递归调用主要就是调用方法本身和跳出条件 2.每一层方法中虽然都有n和result,实际上他们并不是同一个对象,每一层方法拥有自己的n和result,并不共享,在Test(n=1)和return result的时候做值传递而不是地址传递。或者你这样理解这个问题,虚拟机在对方法分配内存地址的时候就标记了每一个n是哪一层方法的

素胚勾勒不出你

以result=Test(n-1)*n;这句作为分界线,执行到这句之前第七层(n=2)是由第六层传进来的,执行这句时第七层调用第八层,传递参数n=1;等待第八层处理结束之后赋值给result。此时第七层并没有结束,是处于等待状态。第八层中接收n=1,返回1,将这个1赋值给第七层中的result,第七层继续执行后面的语句。第七层执行完之后把result传给第六层,在第六层再次执行,直至回到第一层执行完毕
随时随地看视频慕课网APP

相关分类

Java
我要回答