代码为:
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");
}
执行效果为
为什么递归后会执行后面的输出语句,而且是在最后一次一起执行,不是每次递归前输出
Évidemment, votre logique ne doit pas être récursive
score
, mais un contrôle de boucle enmain
.PS : La récursivité convient à une utilisation dans certaines logiques évidemment faciles à lire après utilisation, comme la séquence de Fibonacci. La récursivité doit parfois être transformée en boucle, car lorsque le niveau de récursivité est profond, ses performances sont très mauvaises et exponentiellement pires.
Pour comprendre la récursivité, le meilleur moyen est de procéder au débogage en une seule étape, tout sera clair
La récursivité, la récursivité, bien sûr, exécute l'intégralité du corps de la fonction à chaque fois,
Étant donné que votre code de sortie se trouve après l'appel récursif, il est affiché ensemble en dernier. Lorsque la récursion la plus interne atteint la dernière phrase, elle retourne à la couche externe, continue d'exécuter l'instruction après l'appel récursif, c'est-à-dire l'instruction de sortie de la couche externe, puis retourne à la couche externe jusqu'à la couche la plus externe.
Parce que vous avez entré 3 à la fin, vous avez laissé le if au lieu du else. Après la sortie du if, over était imprimé, puis à chaque fois que la boucle récursive sortait, over était imprimé
Parce que le voyage n'est pas encore terminé et doit continuer
En raison de la récursivité, la magie de la récursion n'est pas seulement qu'elle s'appelle à chaque fois, mais la chose la plus étonnante est qu'après l'exécution de la dernière récursion, elle reviendra vers le haut couche par couche, donc la sortie sera sortie à la fin, et il ne génère pas de message à chaque fois qu'il est appelé.
Pensez d'abord à la dernière exécution, puis avancez