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

代码为:

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

执行效果为

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

巴扎黑
巴扎黑

membalas semua(8)
大家讲道理

Jelas sekali, logik anda tidak seharusnya rekursif score, tetapi kawalan gelung dalam main.
PS: Rekursi sesuai digunakan dalam beberapa logik yang jelas mudah dibaca selepas digunakan, seperti jujukan Fibonacci. Rekursi kadangkala perlu diubah menjadi gelung, kerana apabila tahap rekursi adalah dalam, prestasinya sangat lemah dan secara eksponen lebih teruk.

伊谢尔伦

Untuk memahami rekursi, cara terbaik adalah dengan penyahpepijatan satu langkah, semuanya akan menjadi jelas

巴扎黑

rekursi, rekursi, tentu saja, seluruh badan fungsi dilaksanakan setiap kali,

刘奇

Oleh kerana kod output anda adalah selepas panggilan rekursif, ia adalah output bersama terakhir. Apabila rekursi paling dalam mencapai ayat terakhir, ia kembali ke lapisan luar, terus melaksanakan pernyataan selepas panggilan rekursif, iaitu, pernyataan keluaran lapisan luar, dan kemudian kembali ke lapisan luar sehingga lapisan paling luar.

黄舟

Oleh kerana anda memasukkan 3 pada penghujung, anda meninggalkan if dan bukannya else Selepas if keluar, over telah dicetak, dan kemudian over dicetak setiap kali gelung rekursif keluar

阿神

Sebab perjalanan belum berakhir dan perlu diteruskan

小葫芦

Oleh kerana rekursi, keajaiban rekursi bukan sahaja ia memanggil dirinya sendiri setiap masa, tetapi perkara yang paling menakjubkan ialah selepas rekursi terakhir dilaksanakan, ia akan kembali ke atas lapisan demi lapisan, jadi output melebihi akan menjadi output pada akhirnya, dan Ia tidak mengeluarkan over setiap kali ia dipanggil.

Peter_Zhu

Fikirkan tentang pelaksanaan terakhir dahulu, kemudian tolak ke hadapan

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan