java算法-兔子对数问题
来源:互联网 发布:photoshop mac安装包 编辑:程序博客网 时间:2024/05/19 04:05
package com.zhangxing.arthmetic;/** * 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子, * 小兔子长到第三个月后每个月又生一对兔子, * 假如兔子都不死,问每个月的兔子总数为多少? * 程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21.... * @author zhangxing * */public class FirstRabbit {/** * * @param month , pair * @return pairOfRabbits */public long getPairOfRabbits(long month , long pair){//参数校验boolean checkMonthResult = checkMonth(month);boolean checkMonthPair = checkPair(pair);//定义初始变量兔子总对数//int pairOfRabbits = 0;//考虑到数值会非常大,所以该处改为longlong pairOfRabbits = 0;//1.先判断校验是否通过if(checkMonthResult && checkMonthPair){if(month <= 2){pairOfRabbits = 1;}else{//因为一直访问的是该函数本身,所以用了递归算法,公式:第三个月的为前两个之和pairOfRabbits = getPairOfRabbits(month-1 ,1) + getPairOfRabbits(month-2 ,1);}}return pair * pairOfRabbits;}//对传入的初始兔子对数进行校验private boolean checkPair(long pair) {if(pair < 0){//目前是打印在console,正常情况下放在日志下,logger.log();System.out.println("【输入的兔子对数不合法!】");return false;}return true;}//对传入的月份进行校验private boolean checkMonth(long month) {if(month < 0){//目前是打印在console,正常情况下放在日志下,logger.log();System.out.println("【输入的月份不合法!】");return false;}return true;}}
最近对算法产生了很浓的兴趣,网上找了找经典的算法题。
但是经过简单的测试后发现问题,效率太慢。原因在于递归算法本身对该方法访问的次数太多。
针对这个问题,去网上找了一下源码。
long f1 = 1L, f2 = 1L; long f; for(int i=3; i<50; i++) { f = f2; f2 = f1 + f2; f1 = f; System.out.print("第" + i +"个月的兔子对数: "); System.out.println(" " + f2); }发现源码的速度非常快,当时就对此非常诧异,研究后发现了以前学习数据结构时候讲到的复杂度问题,目前正在研究中,也请大家不吝赐教~
阅读全文
0 0
- java算法-兔子对数问题
- 递归求解兔子对数问题
- Java编程_兔子对数
- Java算法题:兔子问题
- Java算法之“兔子问题”
- java算法--兔子繁殖问题
- java小算法—数兔子问题
- Java兔子生兔子问题
- 兔子算法问题
- 兔子问题----算法基础
- java:兔子算法
- java练习题:兔子问题
- Java兔子问题
- JAVA求解兔子问题
- java面试:兔子问题
- java 生兔子问题
- Java经典兔子问题
- java关于兔子问题
- Ubuntu16.04下安装OpenCV3.2.0
- 在FreeMarker框架中使用Shiro的Tag标签
- xml基础
- git stash
- 欢迎使用CSDN-markdown编辑器
- java算法-兔子对数问题
- 自定义仿 ios 加载框和自定义 Toast 带动画效果
- Ubuntu环境下Tomcat上添加域名,遇到80端口无法启动问题
- android 流式布局(热门标签)
- 适配问题:两数相除得小数点后两位
- maven项目jdk设置
- python开发
- 一直想读一个MBA来着,我就是上班有点累,想胡扯一下
- javascript高级部分需要注意的地方