【程序题】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
引用分析图
方法1:使用递归思想,思路如下
/**
* 分析:
* Month1: 1对 = 1
* Month2: 1对 = 1
* Month3: 1对 + 1对(新出生) = 2
* Month4: 1对 + 1对(上月出生) + 1对(这月新生) =3
* Month5: 1对 + 1对(上上月出生) + 1对(上月出生) + 1对(这月新生) + 1对(第一对新出生的兔子新出生一对兔子) = 5
* Month6: 1对 + 1对(上上上月出生) + 1对(上上月出生) + 1对(上月出生) + 1对(这月新生) + 1对(第一对新出生的兔子上月新出生一对兔子) + 1对(第一对新出生的兔子新出生一对兔子) + 1对(第二对新生兔子此月新生第一对兔子) = 8
* 。。。。。。。 1,1,2,3,5,8.。。。 菲波那切数列 即 f(n+2) = f(n) + f(n+1);
*/
递归
方法2:构造函数思想,思路如下
/**
*分析:可以先不用考虑背后究竟是什么数据规律,只要关注其中一点:
*兔子在什么时候出生的,以及什么可以生小兔子了
*所以问题简化为:实际月份- 出生月份 >= 2 就可以生小兔了
/**
因此先构造一个类,取名为兔子;里面只有一个属性,就是出生日期;
定义一个兔子类
紧接着,是具体计算和打印,在这里我们可以使用一个While条件循环,在设定的时间范围内进行计数累加:代码如下:
具体计算,为了方便直接在构造函数里处理了
欢迎大家提供不同的思路,相互切磋学习,一起进步!