学计算机的对 Fibonacci 都并不陌生,在课堂上一讲到递归几乎都会提到 Fibonacci 数列。不久前,我对 Fibonacci 产生了一些兴趣,就在这里把自己的想法给记录下来。

递推公式:

=3 \end{matrix}\right." class="mathcode" src="https://private.codecogs.com/gif.latex?%5Cinline%20f%28n%29%3D%5Cleft%5C%7B%5Cbegin%7Bmatrix%7D%201%20%26%20n%3D1%20%5C%5C%201%20%26%20n%3D1%20%5C%5C%20f%28n-1%29+f%28n-2%29%20%26%20n%3E%3D3%20%5Cend%7Bmatrix%7D%5Cright.">

通项公式:

我们还是以最原始的兔子问题为例子:

第一个月有一对兔子,兔子呢按照这种规律生长:当一对兔子两个月成熟后,以后每个月就会出生一对兔子。而且兔子不会死亡。

为了方便区分,我们分别用一个符号来指代兔子的年龄:口 --> 0月,日 --> 1月,目 --> 2月。f(n)代表第 n 月。

f(n) f(1) f(2) f(3) f(4) f(5) f(6) f(7) f(8) f(9) ...
1 0 1 1 2 3 5 8 13 ...
0 1 0 1 1 2 3 5 8 ...
0 0 1 1 2 3 5 8 13 ...

由以上表格可以得出:

  • 除去一月每一个的口和目的数量是相等的。
  • 每一个月的目来自于上一个月的日和目的和。
  • 每一个月的日来自于上一个月的口。

则有:

f(n)=口(n)+日(n)+目(n)

=2*(日(n-1)+目(n-1))+口(n-1)

=f(n-1)+日(n-1)+目(n-1)

=f(n-1)+口(n-2)++日(n-2)+目(n-2)

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

当然使用数学归纳法证明会更加方便。

像生活中的有些问题都可以用 Fibonacci 数列解决,例如:爬楼梯

我们爬楼梯一般都是走一个阶梯或者是跨两个阶梯。

那我现在要问了:如果有n层阶梯,想在依照上面的走法,请问有多少种不同的方法,可以刚好到达顶层呢?

首先分析简单情况:

阶梯数 1 2 3 4 5 6
  1 11 111 1111 11111 111111
    2 21 211 2111 21111
      12 121 1211 12111
        112 1121 11211
        22 1112 11121
          221 11112
          212 1122
          122 2211
            1221
            2112
            1212
            2121
总和 1 2 3 5 8 13

怎么样下面的数列是不是有点熟悉如果在前面加个1,则为:1,1,2,3,5,8,13。。。

或者可以这样理解它们相邻的差刚好为1,1,2,3,5,8,13。。。

又或者可以看成:前一个数的两倍减去后一个数就成为以零开头的 Fibonacci 数列:0,1,1,2,3,5,13。。。

  • 2=1*2-0
  • 3=2*2-1
  • 5=3*2-1
  • 8=5*2-2
  • 13=8*2-3
  • 21=13*2-5

反正不管是什么样的规律都会相似于 Fibonacci 数列。或许这仅仅只是个数学巧合吧,具体我也没深究,只是发现了这一规律。

【数据结构与算法】Fibonacci Sequence的更多相关文章

  1. 每周一练 之 数据结构与算法(Queue)

    这是第二周的练习题,这里补充下咯,五一节马上就要到了,自己的计划先安排上了,开发一个有趣的玩意儿. 下面是之前分享的链接: 1.每周一练 之 数据结构与算法(Stack) 2.每周一练 之 数据结构与 ...

  2. 数据结构与算法 Big O 备忘录与现实

    不论今天的计算机技术变化,新技术的出现,所有都是来自数据结构与算法基础.我们需要温故而知新.        算法.架构.策略.机器学习之间的关系.在过往和技术人员交流时,很多人对算法和架构之间的关系感 ...

  3. Java数据结构与算法 - 外部存储

    Q: 什么是外部存储? A: 外部存储特指某类磁盘系统,例如在大多数台式电脑或服务器中的硬盘. Q: 如何访问外部存储? A: 我们所学的数据结构都是假设数据存储在内存中,但是,在很多情况下要处理的数 ...

  4. Python3-Cookbook总结 - 第一章:数据结构和算法

    第一章:数据结构和算法 Python 提供了大量的内置数据结构,包括列表,集合以及字典.大多数情况下使用这些数据结构是很简单的. 但是,我们也会经常碰到到诸如查询,排序和过滤等等这些普遍存在的问题. ...

  5. 842. Split Array into Fibonacci Sequence能否把数列返回成斐波那契数列

    [抄题]: Given a string S of digits, such as S = "123456579", we can split it into a Fibonacc ...

  6. Python(一)数据结构和算法的20个练习题问答

    数据结构和算法 Python 提供了大量的内置数据结构,包括列表,集合以及字典.大多数情况下使用这些数据结构是很简单的. 但是,我们也会经常碰到到诸如查询,排序和过滤等等这些普遍存在的问题. 因此,这 ...

  7. 为什么我要放弃javaScript数据结构与算法(第十一章)—— 算法模式

    本章将会学习递归.动态规划和贪心算法. 第十一章 算法模式 递归 递归是一种解决问题的方法,它解决问题的各个小部分,直到解决最初的大问题.递归通常涉及函数调用自身. 递归函数是像下面能够直接调用自身的 ...

  8. Siki_Unity_2-10_数据结构与算法

    Unity 2-10 数据结构与算法 任务1-1:数据结构简介 数据结构:数据存储的结构,数据之间的关系 数据结构分类: 集合:同属于一个集合 线性结构:数据元素存在一对一的关系 树形结构:数据元素存 ...

  9. 为什么我要放弃javaScript数据结构与算法(第二章)—— 数组

    第二章 数组 几乎所有的编程语言都原生支持数组类型,因为数组是最简单的内存数据结构.JavaScript里也有数组类型,虽然它的第一个版本并没有支持数组.本章将深入学习数组数据结构和它的能力. 为什么 ...

  10. 重读《学习JavaScript数据结构与算法-第三版》- 第3章 数组(一)

    定场诗 大将生来胆气豪,腰横秋水雁翎刀. 风吹鼍鼓山河动,电闪旌旗日月高. 天上麒麟原有种,穴中蝼蚁岂能逃. 太平待诏归来日,朕与先生解战袍. 此处应该有掌声... 前言 读<学习JavaScr ...

随机推荐

  1. System Center Configuration Manager 2016 必要条件准备篇(Part1)

    步骤4.创建系统管理容器 SCCM 2016 配置管理系列(Part 1- 4) 介绍AD01上配置了Active Directory域服务(ADDS),然后将Configuration Manag ...

  2. javascript字符串格式化string.format

    String.prototype.format = function () { var values = arguments; return this.replace(/\{(\d+)\}/g, fu ...

  3. vim 编辑器的使用方法

    vim 命令模式       默认打开文件为命令模式 命令行模式     shift+: 命令行模式 编辑模式       i 编辑模式 Esc 切换命令模式 命令模式 -----字符操作 i   当 ...

  4. js 实现纯前端将数据导出excel两种方式,亲测有效

    由于项目需要,需要在不调用后台接口的情况下,将json数据导出到excel表格,兼容chrome没问题,其他还没有测试过 通过将json遍历进行字符串拼接,将字符串输出到csv文件,输出的文件不会再是 ...

  5. JDBC开发,数据库的连接

    JDBC开发步骤 1.建完工程后,右击工程,new,新建一个文件夹Folder,装jar包,        2.将下载好的驱动包打开,找到jar文件,CTRL+C,选中装jar包的文件夹,CTRL+V ...

  6. ArrayList集合例题,商品库存管理(集合)

    创建车库集合,存进车 public class demo1 { String pinpai; String c; int s; } import java.util.ArrayList; class ...

  7. http 调用错误处理

    1. http code 在使用Nginx时,经常会碰到502 Bad Gateway和504 Gateway Time-out错误,下面以Nginx+PHP-FPM来分析下这两种常见错误的原因和解决 ...

  8. git常用命令以及速查命令

    工作中使用的是git,所以写这个只是为了加深自己的记忆,提高熟练度 共勉~ git 主要命令 要关联一个远程库,使用命令git remote add origin git@server-name:pa ...

  9. Windows10系统下查看mysql的端口号并修改

    mysql的端口号默认是3306,初学者可能有时会忘记或者之前修改了默认的端口号,忘记了,或者很多时候我们一台电脑需要安装两个mysql或者想设置一个自己的喜欢的数字,那么接下来我们来看看如何查看或者 ...

  10. (79)zabbix key总是not supported的解决方法

    zabbix定义好key之后,总是会出现Not supported,看到这个问题,大家不用着急,问题其实很容易解决,首先鼠标点击当前key的大红叉上,会显示出报错内容. 常见的有: 1. zabbix ...