为什么Java里会执行递归后面的语句
巴扎黑
巴扎黑 2017-04-17 17:47:43
0
8
395

代码为:

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)
大家讲道理

很明顯,你這個邏輯不應該遞歸score,而是在main中循環控制。
PS:遞歸適合在一些用了之後明顯易讀的邏輯中使用,例如斐波拉契數列。遞歸有時候還需要改造成循環,因為在遞歸層次深的情況下,其性能很差,指數爆炸級變差。

伊谢尔伦

要理解遞歸,最好的方法就是單步調試,一切都明白了

巴扎黑

遞歸,遞歸,當然是每次都執行整個函數體了,

刘奇

因為你的輸出程式碼是在遞歸呼叫之後,所以是最後一起輸出。當最裡層的遞歸運行到最後一句後,向外層返回,繼續執行遞歸調用後語句,即外層的輸出語句,然後再向外層返回,直到最外層。

黄舟

因為你最後輸入了3啊,所以走了if沒有走else, 從if出來之後就打印了over, 然後每出一次遞歸循環就會打一次over

阿神

因為路沒走完 還要繼續

小葫芦

因為遞歸的原因,遞歸的神奇之處不僅在於每次都會調用自身,最奇妙的是執行最後一次遞歸後,還會一層一層向上返回,所以輸出over會在最後才輸出,而不是沒次調用就輸出一次over。

Peter_Zhu

先想最後一次執行,然後往前推

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板