古典问题算法求解案例

【程序题】  题目:古典问题:有一对兔子,从出生后第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条件循环,在设定的时间范围内进行计数累加:代码如下:

具体计算,为了方便直接在构造函数里处理了

欢迎大家提供不同的思路,相互切磋学习,一起进步!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 假设第1个月有1对刚诞生的兔子,第2个月进入成熟期,第3个月开始生育兔子,而1对成熟的兔子每月会生1对兔子,兔子永...
    rainchxy阅读 8,154评论 0 1
  • 整理一下经典算法用C/C++实现,并思考总结 题目:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第...
    Bill_Wang阅读 10,403评论 0 7
  • 我是个病人,奄奄一息 静卧在床,心脏微弱的跳动 从房间了听取街道一如往日的喧嚣 我不再是徘徊其中的一员 春天即将来...
    谢蚊子阅读 620评论 0 0
  • 撕裂天地黄河来 千折百廻归东海 血腥肉渍飞百外 ...
    高安让阅读 342评论 0 1
  • 凡事抓重点,看目标,因为时间精力不是无穷的
    水波摇曳阅读 207评论 0 0