• 前言

斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从 1963 年起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。

    • 题目

有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一 对兔子,假如兔子都不死,问每个月的兔子总数为多少?

如图

第一个月是对小兔子 数量:1

第二个月小兔子长大了 数量:1

第三个月大兔子生了小兔子,加上自己本身 数量 2=1+1

第四个月大兔子生一个小兔子(2),第三个月的小兔子长大了(1) 数量:3=2+1

可知每对兔子需要一个月长大,两个月才能生产

根据以上图可以找出规律:当月的兔子数=上个月兔子数+上上月兔子数

    • 代码实现
    • 数组方式:
    public void array(int[] arry){//第一月兔子数arry[0] = 1;//第二月兔子数arry[1] = 1;for (int i = 2; i < arry.length; i++) {arry[i] = arry[i-1]+arry[i-2];}System.out.println(arry[arry.length-1]);}
    • 变量交换(效率高)

方式1

    public int  function(int month){//本月兔子数int current = 1;//上个月兔子数int last = 1;for (int i = 1; i < month+1; i++) {if(i<=2){System.out.println(String.format("第%s月,兔子数量%s",i,1));;continue;}//第三个月后的兔子数量 当月兔子数量=上个月兔子数+上上个月兔子数current+=last;//重新赋值上个月数量 上个月兔子数=当月兔子数量-上上个月兔子数last = current-last;System.out.println(String.format("第%s月,兔子数量%s",i,current));;}return current;}

方式2

    public int function2(int month){if(month==0||month==1){return 1;}//本月兔子数int current = 1;//上个月兔子数int last = 1;for (int i = 2; i < month; i++) {//第三个月后的兔子数量 当月兔子数量=上个月兔子数+上上个月兔子数current+=last;//重新赋值上个月数量 上个月兔子数=当月兔子数量-上上个月兔子数last = current-last;}return current;}
    • 递归

递归公式:F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)

递归需要分析结束条件,通过以上需求分析当第一个月或第二个月时兔子数量都是1,可以当做结束递归条件。

实现逻辑如下图

当第6个月的时返回8个1,f(6)=8

    /*** 递归数值过大时效率低* @param month* @return*/public int recursive(int month) {if (month == 1 || month == 2) {return 1;} else {// 递归计算出前一个月和前两个月的合return recursive(month - 1) + recursive(month-2 );}}

测试变量方式1结果如下

算法-斐波那契数列(黄金分割数列|兔子数列)相关推荐

  1. Java数据结构与算法---斐波那契数列Fibonacci

    Java数据结构与算法-斐波那契数列Fibonacci 原理都很简单,直接上代码: package cn.m_fibonacci;public class Fibonacci {public stat ...

  2. 斐波那契(黄金分割)查找

    11. 斐波那契(黄金分割法)查找算法 黄金分割点是指把一条线段分割成两部分,是其中一部分与全长之比等于另一部分与这部分之比.取其前三位数字的近似值是 0.618. 由此按此比例设计的造型十分美丽,因 ...

  3. 最优化算法-斐波那契数列搜索

    斐波那契数列搜索,参考Edwin<最优化导论>第四版7.3章节,算法采用go语言实现. /****************************************** FileNa ...

  4. 趣学算法--斐波那契数列

    14天阅读挑战赛 努力是为了不平庸~ 目录 1.神奇的兔子数列 1.1问题分析 1.2斐波那契数列 1.3算法设计 1.3.1递归代码 1.3.2递归的改进,O(n)的代码 1.3.3时间复杂度为O( ...

  5. 著名数列及其算法(斐波拉契)

    1.斐波那契数列 2.帕多瓦数列 3.卡特兰数 4.Look-and-say 数列 5.递推数列 – – 1.斐波那契数列 斐波那契数列,又称黄金分割数列.因数学家列昂纳多·斐波那契以兔子繁殖为例子而 ...

  6. 427-动态规划算法-斐波那契数列

    动态规划算法求解斐波那契数列 状态:dp数组,存储已经求解的子问题的最优解 递归版本的动态规划算法 //参数n表示斐波那契数列中数字的个数. //返回相应个数的斐波那契数列数字的值. int fabn ...

  7. 经典算法——斐波那契数列

    斐波那契数列的经典解法是采用递归的方式: f(n)=f(n-1)+f(n-2)   n>2 f(1)=1      n=1 f(2)=1      n=2 按照这个思路可以写出递归算法: #in ...

  8. 算法-斐波那契数列:兔子序列

    利用递归函数求斐波那契数列(兔子序列) 1.1.2.3.5.8.13.21-求第n个数是几,n任意一个数大家可以自定义,比如10,20等 分析: 从给出的数列中,可知, n=1时→1 n=2时→1 n ...

  9. C语言中经典算法——斐波那契数列的几种算法

    斐波那契数列的递推公式: 我们尝试计算斐波那契数列的第n项并输出. 1.递归法 #include<stdio.h> int fib(int m) {if(m>=3){return f ...

最新文章

  1. php取当前是pc还是手机号,利用PHP判断是手机移动端还是PC端访问的函数示例
  2. 正则表达式基本语法详解
  3. 用时间戳判断两个时间是否在同一天和时区转换问题
  4. Kubernetes存储之volume
  5. 如何判断数组所有数都不等于一个数_【每日算法Day 91】求解数组中出现次数超过1/3的那个数
  6. BZOJ 1567: [JSOI2008]Blue Mary的战役地图
  7. java多线程知识点总结
  8. 经典排序算法学习笔记七——堆排序
  9. Chrome插件-JSONView
  10. 10分钟搭建一个H5商城,支持微信支付和各平台小程序
  11. linux测试上行带宽,linux服务器上传下载带宽测试
  12. 织梦CMS首页被篡改怎么办?
  13. 在计算机中NIC是什么意思?
  14. Oracle EBS 统计数据收集模式(Gather Schema Statistics)报错处理
  15. 一起talk C栗子吧(第一百八十七回:C语言实例--反余弦函数 )
  16. Linux下socket编程之UDP简单实现
  17. PCI DSS合规性审核认证服务
  18. 原生JS实现marquee 滚动字幕效果,完美解决频闪问题
  19. Polymorphic 梦里花落知多少
  20. android相机故障代码解决方法,Android调用相机拍照后无法返回问题处理

热门文章

  1. 原来地图导航结合WebAR技术还能这么玩
  2. UTF、Unicode、ASCII及中文编码
  3. 停车场管理系统(数据库)
  4. 说点理论-什么叫TED背景
  5. PhEmail:基于Python的开源网络钓鱼测试工具
  6. Linux下Anaconda的安装及使用教程
  7. 我查查 并行数据处理应对突发流量
  8. 2020年现实社会语录,句句道尽人性
  9. 【训练7】边长可变的正方形
  10. 学好ASP编程必会的代码