一、问题描述
- 一对兔子,从第3个月开始,每个月生1对小兔崽子,且每只兔子都不会死亡;
- 小兔崽子也会按照上面的过程进行生小兔崽子
- 问第N月后,有几对兔子
二、问题分析
月份 | 兔子数量(对) | 说明 |
---|---|---|
1月 | 1 | 第1月,①兔子不能生 |
2月 | 1 | 第2月,①兔子不能生 |
3月 | 2 | 第3月,①兔子满3月,生1对兔子② |
4月 | 3 | 第4月,①兔子生1对兔子③,②兔子不能生 |
5月 | 5 | 第5月,①兔子生1对兔子④,②③兔子不能生 |
6月 | 8 | 第6月,①兔子生1对兔子⑤,②兔子生1对兔子⑥,③兔子不能生 |
从上面的分析来看,从第三个月开始,每个月的兔子数量都是前两个月的和 1
可推导出公式:sum(n) = sum(n - 1) + sum(n - 2), n > 2
三、代码实现
- 递归算法
/**
* 计算兔子数量 (递归算法)
*
* @param month 月份
* @return
* @throws Exception
*/
private static int rabbit(int month) throws Exception {
if (month <= 0) {
// 不大于0的月份没有意义
throw new Exception("月份必须大于0"