一、递归算法
(方法定义中调用方法本身的现象就是递归,但是并不等同于方法的嵌套)
1、为什么要使用递归算法
循环和递归的区别:
当我们知道了要循环的次数,此种情况下我们使用循环操作,但是有些时候我们并不清楚要循环的次数,在这种情况下我们就要使用到递归了
2、递归使用中需要注意的事项
1、递归一定要有出口,不然就会形成死循环
2、递归的次数不宜过多,否则就会内存溢出
3、构造方法不能使用递归
3、递归算法中需要满足的条件
1、写一个方法(此方法需满足2、递归使用中需要注意的事项中的3个条件)
2、要有出口条件
3、要有正确的规律
例如求阶乘:
1、 做递归要写一个方法:
返回值类型:int
参数列表:int n
2、 出口条件:
if(n == 1) {return 1;}
3、 规律:
if(n != 1) {return n方法名(n-1);}
package com.qsw.datastructure.digui.demo01;
public class JieCheng {
public static void main(String[] args) {
System.out.println("6的阶乘是:"+jc(6));
}
/*
* 做递归要写一个方法:
* 返回值类型:int
* 参数列表:int n
* 出口条件:
* if(n == 1) {return 1;}
* 规律:
* if(n != 1) {return n*方法名(n-1);}
*/
public static int jc(int n) {
if(n == 1) {
return 1;
}else {
return n*jc(n-1);
}
}
}
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
package com.qsw.datastructure.digui.demo01;
/*
* 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第二十个月的兔子对数为多少?
* 分析:我们要想办法找规律
* 兔子对数
* 第一个月: 1
* 第二个月: 1
* 第三个月: 2
* 第四个月: 3
* 第五个月: 5
* 第六个月: 8
* ...
*
* 由此可见兔子对象的数据是:
* 1,1,2,3,5,8...
* 规则:
* A:从第三项开始,每一项是前两项之和
* B:而且说明前两项是已知的
*
* 如何实现这个程序呢?
* A:数组实现
* B:变量的变化实现
* C:递归实现
*
* 假如相邻的两个月的兔子对数是a,b
* 第一个相邻的数据:a=1,b=1
* 第二个相邻的数据:a=1,b=2
* 第三个相邻的数据:a=2,b=3
* 第四个相邻的数据:a=3,b=5
* 看到了:下一次的a是以前的b,下一次是以前的a+b
*/
public class JieCheng2 {
public static void main(String[] args) {
System.out.println("第20个月兔子数量是:"+jc(6)+"对");
}
public static int jc(int n) {
if(n == 1 || n == 2) {
return 1;
}else {
return jc(n-1)+jc(n-2);
}
}
}