目录
一.定义,递归:
二.解决递归问题的核心:
三.注意事项:
四.递归实例
五:感悟
一.定义,递归:
1.方法调用自己
2.必须要有终止条件
二.解决递归问题的核心:
1.思考递归形式,从 n -> n-1,很重要,也可以思考从1 ->2
2.递归的终止条件,很重要
做递归只要想清楚这2件事情。
三.注意事项:
没有递归终止条件,会导致栈溢出,即StackOverFlowError。
因为递归相当于调用函数,函数里面的参数等信息会存入栈中。
四.递归实例
要想做出递归,我们只需要把握好终止条件和n到n-1的递归形式。
1.求n的阶乘
public int jiecheng(int n){
if(n==1) return 1;
return jiecheng(n-1)*n;
}
在这个例子中,我们来分析递归的核心问题:
①递归终止条件:当n为1的时候,返回1。代码表示为 if(n==1) return 1;
②递归形式:返回递归形式,递归形式为jiecheng(n-1)*n。代码表示为return jiecheng(n-1)*n;
2.斐波那契数列
public int fblq(int n){
int (n==1 || n==2){
return 1;
}
return fblq(n-1) + fblq(n-2);
}
3.汉诺塔
public void hannoi(int n,char a,char b,char c){
if(n==1){
move(a,c);
return;
}
hanio(n-1,a,c,b);
move(a,c);
hanio(n-1,b,a,c);
}
public void move(char a,char c){
System.out.println(a+"->"+c);
}
分析:汉诺塔,经典的递归模型,仔细思考会觉得很复杂,但是不断重复的移动,使用递归。
①递归终止条件:当n为1的时候,将a柱的盘子移动到c柱,并返回。
②递归形式:只需将a柱上n-1个盘子先移动到b,然后将a柱最下面的盘子移动到c柱,然后再将b柱上n-1个盘子,移动打c柱即可。
五:感悟:详细思考递归整个过程会很复杂,但只需分析出递归终止条件和递归形式,便能做出。
下篇介绍递归与分形。