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。求解啊...
3 回答
沧海一幻觉
TA贡献1824条经验 获得超5个赞
1.因为在这一行你再次调用了这个方法,递归调用主要就是调用方法本身和跳出条件 2.每一层方法中虽然都有n和result,实际上他们并不是同一个对象,每一层方法拥有自己的n和result,并不共享,在Test(n=1)和return result的时候做值传递而不是地址传递。或者你这样理解这个问题,虚拟机在对方法分配内存地址的时候就标记了每一个n是哪一层方法的
素胚勾勒不出你
TA贡献1827条经验 获得超9个赞
以result=Test(n-1)*n;这句作为分界线,执行到这句之前第七层(n=2)是由第六层传进来的,执行这句时第七层调用第八层,传递参数n=1;等待第八层处理结束之后赋值给result。此时第七层并没有结束,是处于等待状态。第八层中接收n=1,返回1,将这个1赋值给第七层中的result,第七层继续执行后面的语句。第七层执行完之后把result传给第六层,在第六层再次执行,直至回到第一层执行完毕
添加回答
举报
0/150
提交
取消