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

 安琪儿 发布于 2022-10-28 17:22

代码为:

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");
}

执行效果为

为什么递归后会执行后面的输出语句,而且是在最后一次一起执行,不是每次递归前输出

8 个回答
  • 先想最后一次执行,然后往前推

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

    2022-11-12 01:45 回答
  • 因为路没走完 还要继续

    2022-11-12 01:45 回答
  • 因为你最后输入了3啊,所以走了if没有走else, 从if出来之后就打印了over, 然后每出一次递归循环就会打一次over

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

    2022-11-12 01:45 回答
  • 递归,递归,当然是每次都执行整个函数体了,

    2022-11-12 01:45 回答
  • 要理解递归,最好的办法就是单步调试,一切都明白了

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

    2022-11-12 01:45 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有