这是昨天在csdn论坛上看到的一道题,觉得比较经典,这里把自己的几种做法写出来。
问题大概:
假设有一种牛,3岁成年,成年后具备自交能力,也就是说不用公牛帮忙,每年可以生产出一只同种类的牛,问如果一个农场有1只该品种0岁的 牛,不考虑牛的寿命问题,那么10年后农场总共 有多少只牛?
说明:
其实原问题没有这么复杂,但是考虑到一些不必要的争议,所以加了不少题设。从题面上看,头两年第一只牛只能孤独的度过,到了第三年开始,牛会诞下第一个孩子,接下来的每一年都会继续生育,而生下来的孩子三岁成年后也会加入生育大军,孩子的孩子也会陆续具备生育能力。。。
结果:
算法:
1.回溯算法实现:
2.利用数组作为辅助结构的解法(三种解法中最高效):
3.面向对象的解法:
(1)牛的类
(2)产牛流程
测试代码:
总结:
据测试,以上三种方法中,数组实现的方法是最高效率的,其空间复杂度为O(1),而时间复杂度为O(N),在效率上,是其他两种方法不可比拟的,其次是回溯法的解法,从逻辑设计上,面向对象的解法是最容易理解的。这道题相信还存在着多种更优秀解题思路,如果从数学角度上进行分析归纳,或许还有效率更优的算法,有待日后探究,如有更好的思路,望不吝赐教!