代码为:
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");
}
执行效果为
为什么递归后会执行后面的输出语句,而且是在最后一次一起执行,不是每次递归前输出
Jelas sekali, logik anda tidak seharusnya rekursif
score
, tetapi kawalan gelung dalammain
.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.
Fikirkan tentang pelaksanaan terakhir dahulu, kemudian tolak ke hadapan