1. 题目描述:
Java古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?
2.题目分析
第一个月:一对小兔子 1
第二个月:一对小兔子变成大兔子 1
第三个月:一对大兔子,生成一对小兔子,1+1=2
第四个月:二对大兔子(上个月的小兔子变成了大兔子),一对小兔子 1+2=3
第五个月:三对大兔子(上个月的小兔子变成了大兔子),二对小兔子 3+2=5
第六个月:五只大兔子(上个月的小兔子变成了大兔子),三对小兔子 5+3=8
以此类推....规律是 1 1 2 3 5 8 ,前两项之和等于后一项,典型的斐波那契数列问题.
3.代码实现
/**
* <p>计算兔子每月数量</p>
*
* @param month 月份
* @return 每月份兔子的数量
*/
public static int number(int month) {
// 参数校验
if (month <= 0) {
throw new IllegalStateException("参数不合法!");
}
// 当兔子月份不大于2的时候还是等于1
if(month == 1 || month == 2) {
return 1;
}
// 递归计算出前一个月和前两个月的合
return number(month-1) + number(month-2);
}