递归算法是方法内调用自身;
递归算法必须要有个明确的条件作为算法结束的出口,被称为递归出口;
递归算法的不足:在递归调用的过程中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等,所以一般不提倡用递归算法设计程序。
递归算法有个很重要的就是递归算法的出口条件,满足出口条件,就不递归了。
举个栗子:代码如下:
class Factorial {
//递归函数
int fact(int n){
if(n==1){
return 1;
}else{
return fact(n-1)*n;
}
}
}
public class TestFactorial {
public static void main(String[] args) {
Factorial factorial= new Factorial();
System.out.println("factorial(10)="+factorial.fact(10));
}
}
结果截图:
再举个栗子:这是个移动盘子的实验
public class Hanio {
public static void main(String[] args){
int i=3;
char a ='A',b='B',c='C';
hanio(i,a,b,c);
}
public static void hanio(int n,char a,char b,char c){
if(n==1)
System.out.println("移动"+n+"号盘子从"+a+"到"+c);
else{
hanio(n-1,a,c,b);//把上面n-1个盘子从a借助b搬到c
System.out.println("移动"+n+"号盘子从"+a+"到"+c);//紧接着直接把n搬动c
hanio(n-1,b,a,c);//再把b上的n-1个盘子借助a搬到c
}
}
}
截图: