java之不死神兔(斐波那契数列)
来源:互联网 发布:如何建立网络打印机 编辑:程序博客网 时间:2024/04/30 15:10
1.需求
有一对兔子,从出生后第三个月开始每月生一对兔子,小兔子从第三个月开始每月也生一对兔子,加入是不死神兔,那么第20个月一共生多少对兔子?
2.分析
第一个月兔子对数: 1
第二个月兔子对数:1
第三个月兔子对数:2
第四个月兔子对数:3
第五个月兔子对数:5
第六个月兔子对数:8
....
斐波那契数列:1,1,2,3,5,8...
第二个月兔子对数:1
第三个月兔子对数:2
第四个月兔子对数:3
第五个月兔子对数:5
第六个月兔子对数:8
....
斐波那契数列:1,1,2,3,5,8...
3.方法实现(三种方法)
- 数组实现
- 相邻变量规律实现
- 递规实现
思路:先写出几个(大部分都是这样的思想,第一次、第二次、第三次,然后规律就出来了),然后找规律。
代码体现
public class RabbitTest {public static void main(String[] args) {// 方法1int[] array = new int[20];// 从第三个月开始,是前两个数的和array[2]=array[1]+array[0]array[0] = 1;// 已知array[1] = 1;// 已知for (int x = 2; x < array.length; x++) {array[x] = array[x - 1] + array[x - 2];}System.out.println("第20个月的兔子对数是:" + array[array.length - 1]);// 方法2(相邻取值法)/* * 假设相邻的兔子对数是x,y 第一个相邻数据: x=1,y=1 * 第二个相邻数据: x=1,y=2 第三个相邻数据: x=2,y=3 * 第四个相邻数据: x=3,y=5 第五个相邻数据: x=5,y=8 ..... * 第x次的x是上一次的y值,第x次的y是上一次的x和y之和 */int x = 1;// 已知int y = 1;// 已知// 为什么18次循环呢?因为从第二次开始x=1,y=1+1的,少一次,3个数据相邻的次数只有2次,,所以由少一次,所以18次for (int i = 0; i < 18; i++) {int tempx = x;// 上一次的xint tempy = y;// 上一次的yx = tempy;y = tempx + tempy;}System.out.println("第20个月的兔子对数是:" + y);// 方法3//递规方法System.out.println("第20个月的兔子对数是:" + getSum(20));}// 递规实现// 方法返回值类型int,参数列表int month,出口条件month=1或者month=2,规律前两个月之和public static int getSum(int month) {if (month == 1 || month == 2)return 1;elsereturn getSum(month - 1) + getSum(month - 2);}}
4.归纳总结
1.递规思想
①必须要有方法②要有出口条件,不然就是死递规③必须有规律
注意:递规次数不能太多,否则每次调用一次方法就在栈内存加载一次,然后到出口条件依次出栈,次数过多会导致内存溢出。
2.注意细节,循环执行多少次,自己要清楚。
0 0
- java之不死神兔(斐波那契数列)
- 递归-斐波纳挈数列(不死神兔)
- Java之斐波那契数列
- 斐波那契数列(Java)
- think in java之斐波那契数列
- Java与算法之(3) - 斐波那契数列
- java算法之斐波那契数列
- 算法之斐波那契数列
- 递归之斐波那契数列
- LintCode之斐波那契数列
- 递归之斐波那契数列
- 牛客网刷题之斐波那契数列
- python之斐波那契数列
- 递归之斐波那契数列
- 经典算法系列之不死神兔
- 斐波那契数列 java
- Java计算斐波那契数列
- 斐波那契数列Java版
- UNION 和 UNION ALL
- 探讨elasticsearch tribe跨机房日志收集的实现
- 【获奖纪实】2016年“CCF优秀大学生奖”拟获奖者名单公示
- linux下安装mongodb
- 单页应用搭建过程记录
- java之不死神兔(斐波那契数列)
- c#控制输入学习
- Tomcat8地址栏传值时长度过长引起的问题
- Fragment Transactions与Activity状态的丢失
- MXNET安装
- java发送http的get、post请求
- vim插件管理器:Vundle的介绍及安装(很全)
- Android 初识网络之get/post方法演示
- 理解记忆:删除远程分支