递归的概述:方法调用方法本身的一种现象
前提条件:(1)需要定义一个方法
(2)必须存在出口条件
(3)必须存在规律
例:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第二十个月的兔子对数为多少?
分析:
规律:第一个月:1
第二个月:1
第三个月:2
第四个月:3
第五个月:5
第六个月:8
第二个月:1
第三个月:2
第四个月:3
第五个月:5
第六个月:8
······
(1)从第三个月开始每个月的兔子对数等于前两个月之和
(2)第一个月和第二个月的兔子数是已知的(出口条件)
把每个月相邻兔子对数数据当做: a,b
第一个月和第二个月相邻的数据: a=1,b=1
第二个月和第三个月相邻 的数据: a=1,b=2
第三个月和第四个月相邻的数据: a=2,b=3
第四个月和第五个月相邻的数据: a=3,b=5
....
下一次的a是上一次的b,下一次的b是上一次的a+b
第一个月和第二个月相邻的数据: a=1,b=1
第二个月和第三个月相邻 的数据: a=1,b=2
第三个月和第四个月相邻的数据: a=2,b=3
第四个月和第五个月相邻的数据: a=3,b=5
....
下一次的a是上一次的b,下一次的b是上一次的a+b
public class Rabbit {
public static void main(String[] args) {
System.out.println("第二十个月兔子的对数为:"+getRabbit(20));
}
private static int getRabbit(int month) {
if (month == 1 || month == 2) { // 出口条件
return 1;
} else {
return getRabbit(month - 1) + getRabbit(month - 2); // 规律
}
}
}