算法学习01- 生兔子的问题
来源:互联网 发布:廊坊北商网络 编辑:程序博客网 时间:2024/06/05 19:18
/*【程序1】
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?
1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....
*/
其实这个问题是找规律得出公式,其中规律是nx=(n-1)x+(n-2)x;//其实我也不知道公式该不该这么写,写出来感觉哪里不对
根据所得出的公式解决来写代码,使用递归
/* * 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死, * 问每个月的兔子总数为多少? 1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21,34,55.... */public static long TuZi01(int month) {if (month < 3) {return 1l;} else if (month == 3) {return 2l;}return TuZi01(month - 1) + TuZi01(month - 2);}
代码是写出来了,但是测试的时候出现了一个问题,那就是当月份越大越慢,当月份为60的时候将近执行运算了1分钟。
哇,那这算法学个毛线,于是想了想问题出在了递归上,因为是直接调用method所以数量越大调用的越多,而且本身是在重复调用,于是用一个数组来储存临时的每个月的兔子数,这样会省去一定的运算。
/* * 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死, * 问每个月的兔子总数为多少? 1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21,34,55.... */class ShengTuZi {long[] tuzi = new long[2048];public long TuZi01(int month) {if (month < 3) {return 1l;} else if (month == 3) {return 2l;}if (tuzi[month] == 0) {tuzi[month] = TuZi01(month - 1) + TuZi01(month - 2);}return tuzi[month];}}
然后我看了标准答案。。。。。。。。。擦,感觉用递归有点low,而且我没看清题目,要算出每个月的兔子对数。。。擦
public static void main(String[] args){int MONTH = 50;long f1 = 1L, f2 = 1L;long f;for (int i = 3; i < MONTH; i++) {f = f2;f2 = f1 + f2;f1 = f;System.out.print("第" + i + "个月的兔子对数: ");System.out.println(" " + f2);}}
阅读全文
0 0
- 算法学习01- 生兔子的问题
- 算法--兔子生兔子的问题(费氏数列)
- 兔子生兔子的问题
- 兔子生兔子问题
- 兔子生兔子问题
- 兔子生兔子问题
- 兔子生兔子问题
- 兔子生兔子问题
- 生兔子问题(递归算法)
- 兔子算法问题
- 兔子问题----算法基础
- Java兔子生兔子问题
- 递归的力量之兔子生兔子问题
- Fibonacci的【兔子数列】 以及 【狐狸找兔子】的问题 及 算法!
- 狐狸吃兔子问题算法
- Java算法题:兔子问题
- 算法——兔子问题
- 算法 狼找兔子问题
- 自动轮播RollPagerView
- 这是一封给程序员的1024挑战书
- Excel之按原格式复制粘贴工作表
- 大咖云集,技术宅开趴倒计时 —— 2017 Kubernetes Meetup | 成都站
- Docker容器实时迁移的再次尝试
- 算法学习01- 生兔子的问题
- 双指针快速排序
- 第八周项目4稀疏矩阵的三元组表示的实现及应用(1)
- 2017CCPC哈尔滨理工大学站赛后总结
- PHP大数组分组执行
- 计算机网络实验,JAVA实现一个简单GBN协议,模拟引入数据包的丢失,验证协议的有效性
- 可爱的大标题:位运算及其应用
- mysql中 对同一个表先查询后删除时报错,怎么破的问题
- Spring Cloud Feign 的使用注意事项