斐波那契数列的背景及解决方法

背景:
前两天看到一道很有意思的数学题
假定你有一雄一雌一对刚出生的兔子,它们在长到一个月大小时开始交配,在第二月结束时,雌兔子产下另一对兔子,过了一个月后它们也开始繁殖,如此这般持续下去。每只雌兔在开始繁殖时每月都产下一对兔子,假定没有兔子死亡,在一年后总共会有多少对兔子?

首先,在一月底,最初的一对兔子交配,但是还只有1对兔子;在二月底,雌兔产下一对兔子,共有2对兔子;在三月底,最老的雌兔产下第二对兔子,共有3对兔子;在四月底,最老的雌兔产下第三对兔子,两个月前生的雌兔产下一对兔子,共有5对兔子;……如此这般计算下去,兔子对数分别是:1, 1, 2, 3, 5, 8, 13, 21, 34, 55,89, 144, …看出规律了吗?从第3个数目开始,每个数目都是前面两个数目之和。这就是著名的斐波那契(Fibonacci)数列。

表示如图:

月份 兔子数量/对
1 1
2 1
3 2
4 3
5 5
6 8

在这里我们可以看出斐波那契数列的规律,即从第三项开始,每项的值等于它前两项值得和,用数学表达式来表示就是:
Fibonacci数列的数学表达式就是:

F(1) = 1
F(2) = 1
F(3) = F(1) + F(2)
F(4) = F(2) + F(3)

F(n) = F(n-1) + F(n-2)

最简单的方法,使用递归,但是慎用!!!

javapublic static int test3(int n) {if (n == 1 || n == 2) {return 1;}else {return test3(n-1) + test3(n-2);}}

可以看出,递归的优点是结构简单,但是缺点也很明显,那就是运算量太大,数据量小还可以,数据一大容易GG
所以,博主推荐使用下面循环的方法

递推方法(循环):

javaint a = 1, b=1, c = 0;for (int i = 1; i <= n; i++) {if (i == 1) {System.out.println("第" + i + "等于" + a);}else if (i == 2) {System.out.println("第" + i + "等于" + b);}else {c = a+b;a = b;b = c;System.out.println("第" + i + "等于" + c);}}

这种循环的方式是通过给变量不断赋值,来实现结果,运算的时间复杂度要远小于递归方式。
递推方法-数组方式(循环)

java
int[] arrayList = new int[n];arrayList[0] = arrayList[1] =1;for (int i = 0; i < arrayList.length; i++) {if (i == 0) {System.out.println("第" + (i+1) + "等于" + arrayList[0]);}else if (i == 1) {System.out.println("第" + (i+1) + "等于" + arrayList[1]);}else {arrayList[i] = arrayList[i-1] +arrayList[i-2];System.out.println("第" + (i+1) + "等于" + arrayList[i]);}}

利用数组进行存储,把每项的计算结果都存放在数组当中,需要时直接从数组中进行存取,空间复杂度和时间复杂度都比较低。

下面放上几组网络图片,带大家更深入了解斐波那契数列

1.黄金分割
随着数列项数的增加,前一项与后一项之比越来越逼近黄金分割的数值0.6180339887……

2.矩形面积
斐波那契数列与矩形面积的生成相关,由此可以导出一个斐波那契数列的一个性质。斐波那契数列前几项的平方和可以看做不同大小的正方形,由于斐波那契的递推公式,它们可以拼成一个大的矩形。这样所有小正方形的面积之和等于大矩形的面积。则可以得到如下的恒等式:
F1²+F2²+…+Fn² = Fn * F(n+1)²

用途
斐波那契数列中的斐波那契数会经常出现在我们的眼前——比如松果、凤梨、树叶的排列、某些花朵的花瓣数(典型的有向日葵花瓣),蜂巢,蜻蜓翅膀,超越数e(可以推出更多),黄金矩形、黄金分割、等角螺线,十二平均律等

以上所述为总结资料自己理解,如有任何问题请联系作者。新人报道,欢迎大佬们指正(peng peng peng)

斐波那契数列的背景及解决方法相关推荐

  1. 斐波拉契数列的三种实现方法

    百度解释 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为"兔子 ...

  2. 斐波那契数列O(logn)的求解方法

    前言 是的,没错,斐波那契数列除了递推.递归算法之外,还有更加高效的求解方法,那就是矩阵运算+快速幂. 思路: 可以先利用矩阵运算的性质将通项公式变成幂次形式,然后用平方倍增(快速幂)的方法求解第 n ...

  3. 斐波那契数列通项公式的几种方法

    1.递归 2.动态规划 3.矩阵快速幂 转载于:https://www.cnblogs.com/umrx/p/8145954.html

  4. 面试题9:斐波那契数列

    题目1:写一个函数,输入n,其斐波那契数列的第n项. 斐波那契数列的定义如下: 方法1:使用递归解,时间复杂度是n的指数级别 斐波那契数列的定义就是递归的,我们根据定义可以很简单的写出代码.代码如下: ...

  5. 波菲那契数列公式_斐波那契数列为什么那么重要,所有关于数学的书几乎都会提到?...

    一句话先回答问题:因为斐波那契数列在数学和生活以及自然界中都非常有用. 下面我就尽我所能,讲述一下斐波那契数列. 一.起源和定义 斐波那契数列最早被提出是印度数学家Gopala,他在研究箱子包装物件长 ...

  6. Python3实现斐波那契数列.md

    Python3实现斐波那契数列 一.Python3迭代方法实现斐波那契数列 二.Python3递归方法实现斐波那契数列 三.总结规律 斐波那契数列:1, 1, 2, 3, 5, 8, 13, 21, ...

  7. Python - Python3 编程第一步 Fibonacci series: 斐波纳契数列

    Fibonacci series: 斐波纳契数列, 两个元素的总和确定了下一个数,例如:1 1 2 3 5 8 13 21 34 55 Python程序如下: def fibonacci1(n):a, ...

  8. 笔试题:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。该题有三种解法:递归的方法求解斐波那契数列、用概率与统计的数学方法解决,3.动态规划

    笔试题 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个 n 级的台阶总共有多少种跳法.该题有三种解法:1.递归的方法求解斐波那契数列.2.用概率与统计的数学方法解决,3.动态规划 ...

  9. 斐波那契数列(C/C++)

    目录 背景介绍 解法1:非数组+非递归 解法2:数组+非递归 解法3:非数组+递归 解法4:数组+递归 背景介绍 斐波那契数列,又称黄金分割数列,指的是这样一个数列:0.1.1.2.3.5.8.13. ...

最新文章

  1. 王道考研 计算机网络笔记 第四章:网络层
  2. JDK源码分析-Integer
  3. python循环中append_[Python]list.append()在for循环中每次添加的都是最后的一个元素
  4. webpack打包---报错内存溢出javaScript heap out of memory
  5. osgi:install_OSGi服务测试助手:ServiceRegistrationRule
  6. Spring源码解析-实例化bean对象
  7. python web开发,organization的model设计
  8. 武德 | 年轻人!这才叫真正的程序猿的武德
  9. 机器学习(7)——Logistic回归(从疝气病症预测病马的死亡率)
  10. 数据库中数据数据初始化的好处
  11. 旧物回收类网站源码v2.4
  12. 母亲节微信公众号走心文章就用来逗编辑器排版
  13. matlab 均匀设计编程,均匀设计均匀设计表--方开泰.doc
  14. 连接池原理解读,各个连接池对比
  15. 10大习惯让你变年轻
  16. 2018-3-4——st(快速幂)
  17. PNP三极管和NPN三极管的开关电路(EC极性接线判断简单明了)简单的技巧:三极管上箭头所在方向的二极管,只要二极管正向导通,那么三极管上下就能导通。
  18. 公式不懂也无妨,业务精通才是真正的算法工程师
  19. 无线破解攻击工具使用详解
  20. 二叉树前中后序遍历的非递归实现以及层次遍历、zig-zag型遍历详解

热门文章

  1. 用unity开发贪吃蛇,勾起我童年乐趣的小游戏
  2. 通过京东商品ID获取京东商品评论数据,京东商品评论API接口,接口说明接入方案
  3. 服务器状态监控php源码,服务器状态监控_监控Linux服务器网站状态的SHELL脚本
  4. 19-10-29-C++基础学习二
  5. 微信公众号--发送模板消息
  6. 京东首页静态页面html+css
  7. 计算机底层:海明校验码。
  8. 语音识别-特征提取 (一)
  9. 树莓派开机连接桌面的两种方式
  10. mplayer全参数