为什么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");

}

执行效果为

https://img3.mukewang.com/5cb808b2000186f602120383.jpg

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

胡说叔叔
浏览 1395回答 6
6回答

慕田峪7331174

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

繁花如伊

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

隔江千里

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

临摹微笑

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

慕的地8271018

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

慕斯王

因为递归的原因,递归的神奇之处不仅在于每次都会调用自身,最奇妙的是执行最后一次递归后,还会一层一层向上返回,所以输出over会在最后才输出,而不是没次调用就输出一次over。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java