suchen

Heim  >  Fragen und Antworten  >  Hauptteil

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

代码为:

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

执行效果为

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

巴扎黑巴扎黑2889 Tage vor394

Antworte allen(8)Ich werde antworten

  • 大家讲道理

    大家讲道理2017-04-17 17:49:43

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

    Antwort
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 17:49:43

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

    Antwort
    0
  • 巴扎黑

    巴扎黑2017-04-17 17:49:43

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

    Antwort
    0
  • 怪我咯

    怪我咯2017-04-17 17:49:43

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

    Antwort
    0
  • 黄舟

    黄舟2017-04-17 17:49:43

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

    Antwort
    0
  • 阿神

    阿神2017-04-17 17:49:43

    因为路没走完 还要继续

    Antwort
    0
  • 高洛峰

    高洛峰2017-04-17 17:49:43

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

    Antwort
    0
  • 天蓬老师

    天蓬老师2017-04-17 17:49:43

    先想最后一次执行,然后往前推

    Antwort
    0
  • StornierenAntwort