- 在一个类当中有两个或者更多的方法,一个方法可以调其他方法,例如:
public static void test01(){
System.out.println("test01");
test02();
}
public static void test02(){
System.out.println("test02");
}
public static void main(String[] args) {
test01();
}
输出结果:
test01
test02
这个很明显,当然,如果方法很多,test01还可以调用test03,test04….等,但是,test01能不能调它自己呢?
public static void test01(){
System.out.println("test01");
test01();
}
public static void main(String[] args) {
test01();
}
输出结果:报栈溢出错误,原因分析:在test01()一直在反复调自己,最终导致栈溢出。
test01
test01
test01
test01Exception in thread "main" java.lang.StackOverflowError
- 递归算法
递归的基本思想“自己调自己”。
递归结构包括两方面:1.递归头:解答什么时候不调自己,如果没有递归头则会陷入死循环。2,递归体:解答什么时候调自己。
在上例中,就是由于没有递归头,最终导致栈溢出。
对上例进行修改,
static int i=0;
public static void test01(){
i++;
System.out.println("test01");
if(i<5){ //递归体
test01();
}else{ //递归头
System.out.println("执行结束");
}
}
public static void main(String[] args) {
test01();
}
执行结果:
test01
test01
test01
test01
test01
执行结束
练习:使用递归算法,求一个数的阶乘;
public static long factorial(int i){
if(i==1){ //递归头
return 1;
}else{ //递归体
return i*factorial(i-1);
}
}