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

为什么Java里会执行递归后面的语句

为什么Java里会执行递归后面的语句

胡说叔叔 2019-03-26 21:15:26
代码为:public static void main(String[] args) {    // TODO Auto-generated method stub    score();}public static void score(){    System.out.println("请输入一个5分制成绩");    Scanner in = new Scanner(System.in);    int score = in.nextInt();    if(score>=0&&score<=5){        switch(score){        case 5:System.out.println("优秀");        break;        case 4:System.out.println("良好");        break;        case 3:System.out.println("及格");        break;        default:System.out.println("不及格");        break;        }    }    else{        score();    }    System.out.println("over");}执行效果为为什么递归后会执行后面的输出语句,而且是在最后一次一起执行,不是每次递归前输出
查看完整描述

6 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

很明显,你这个逻辑不应该递归score,而是在main中循环控制。
PS:递归适合在一些用了之后明显易读的逻辑中使用,例如斐波拉契数列。递归有时候还需要改造成循环,因为在递归层次深的情况下,其性能很差,指数爆炸级变差。

查看完整回答
反对 回复 2019-04-18
?
繁花如伊

TA贡献2012条经验 获得超12个赞

要理解递归,最好的办法就是单步调试,一切都明白了


查看完整回答
反对 回复 2019-04-18
?
隔江千里

TA贡献1906条经验 获得超10个赞

递归,递归,当然是每次都执行整个函数体了,


查看完整回答
反对 回复 2019-04-18
?
临摹微笑

TA贡献1982条经验 获得超2个赞

因为你的输出代码是在递归调用之后,所以是最后一起输出。当最里层的递归运行到最后一句后,向外层返回,继续执行递归调用后语句,即外层的输出语句,然后再向外层返回,直到最外层。


查看完整回答
反对 回复 2019-04-18
?
慕的地8271018

TA贡献1796条经验 获得超4个赞

因为你最后输入了3啊,所以走了if没有走else, 从if出来之后就打印了over, 然后每出一次递归循环就会打一次over


查看完整回答
反对 回复 2019-04-18
?
慕斯王

TA贡献1864条经验 获得超2个赞

因为递归的原因,递归的神奇之处不仅在于每次都会调用自身,最奇妙的是执行最后一次递归后,还会一层一层向上返回,所以输出over会在最后才输出,而不是没次调用就输出一次over。


查看完整回答
反对 回复 2019-04-18
  • 6 回答
  • 0 关注
  • 1392 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号