为了账号安全,请及时绑定邮箱和手机立即绑定

java递归原理求高人解惑

java递归原理求高人解惑

慕桂英4014372 2019-04-26 19:19:38
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是哪一层方法的

查看完整回答
反对 回复 2019-05-06
?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

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

查看完整回答
反对 回复 2019-05-06
  • 3 回答
  • 0 关注
  • 728 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信