Heim > Fragen und Antworten > Hauptteil
代码为:
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");
}
执行效果为
为什么递归后会执行后面的输出语句,而且是在最后一次一起执行,不是每次递归前输出
大家讲道理2017-04-17 17:49:43
很明显,你这个逻辑不应该递归score
,而是在main
中循环控制。
PS:递归适合在一些用了之后明显易读的逻辑中使用,例如斐波拉契数列。递归有时候还需要改造成循环,因为在递归层次深的情况下,其性能很差,指数爆炸级变差。
怪我咯2017-04-17 17:49:43
因为你的输出代码是在递归调用之后,所以是最后一起输出。当最里层的递归运行到最后一句后,向外层返回,继续执行递归调用后语句,即外层的输出语句,然后再向外层返回,直到最外层。
高洛峰2017-04-17 17:49:43
因为递归的原因,递归的神奇之处不仅在于每次都会调用自身,最奇妙的是执行最后一次递归后,还会一层一层向上返回,所以输出over会在最后才输出,而不是没次调用就输出一次over。