【数据结构与算法】Fibonacci Sequence
学计算机的对 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的更多相关文章
- 每周一练 之 数据结构与算法(Queue)
这是第二周的练习题,这里补充下咯,五一节马上就要到了,自己的计划先安排上了,开发一个有趣的玩意儿. 下面是之前分享的链接: 1.每周一练 之 数据结构与算法(Stack) 2.每周一练 之 数据结构与 ...
- 数据结构与算法 Big O 备忘录与现实
不论今天的计算机技术变化,新技术的出现,所有都是来自数据结构与算法基础.我们需要温故而知新. 算法.架构.策略.机器学习之间的关系.在过往和技术人员交流时,很多人对算法和架构之间的关系感 ...
- Java数据结构与算法 - 外部存储
Q: 什么是外部存储? A: 外部存储特指某类磁盘系统,例如在大多数台式电脑或服务器中的硬盘. Q: 如何访问外部存储? A: 我们所学的数据结构都是假设数据存储在内存中,但是,在很多情况下要处理的数 ...
- Python3-Cookbook总结 - 第一章:数据结构和算法
第一章:数据结构和算法 Python 提供了大量的内置数据结构,包括列表,集合以及字典.大多数情况下使用这些数据结构是很简单的. 但是,我们也会经常碰到到诸如查询,排序和过滤等等这些普遍存在的问题. ...
- 842. Split Array into Fibonacci Sequence能否把数列返回成斐波那契数列
[抄题]: Given a string S of digits, such as S = "123456579", we can split it into a Fibonacc ...
- Python(一)数据结构和算法的20个练习题问答
数据结构和算法 Python 提供了大量的内置数据结构,包括列表,集合以及字典.大多数情况下使用这些数据结构是很简单的. 但是,我们也会经常碰到到诸如查询,排序和过滤等等这些普遍存在的问题. 因此,这 ...
- 为什么我要放弃javaScript数据结构与算法(第十一章)—— 算法模式
本章将会学习递归.动态规划和贪心算法. 第十一章 算法模式 递归 递归是一种解决问题的方法,它解决问题的各个小部分,直到解决最初的大问题.递归通常涉及函数调用自身. 递归函数是像下面能够直接调用自身的 ...
- Siki_Unity_2-10_数据结构与算法
Unity 2-10 数据结构与算法 任务1-1:数据结构简介 数据结构:数据存储的结构,数据之间的关系 数据结构分类: 集合:同属于一个集合 线性结构:数据元素存在一对一的关系 树形结构:数据元素存 ...
- 为什么我要放弃javaScript数据结构与算法(第二章)—— 数组
第二章 数组 几乎所有的编程语言都原生支持数组类型,因为数组是最简单的内存数据结构.JavaScript里也有数组类型,虽然它的第一个版本并没有支持数组.本章将深入学习数组数据结构和它的能力. 为什么 ...
- 重读《学习JavaScript数据结构与算法-第三版》- 第3章 数组(一)
定场诗 大将生来胆气豪,腰横秋水雁翎刀. 风吹鼍鼓山河动,电闪旌旗日月高. 天上麒麟原有种,穴中蝼蚁岂能逃. 太平待诏归来日,朕与先生解战袍. 此处应该有掌声... 前言 读<学习JavaScr ...
随机推荐
- 定时器new Timer().schedule()的使用
Timer是一种工具,线程用其安排以后在后台线程中执行的任务.可安排任务执行一次,或者定期重复执行.实际上是个线程,定时调度所拥有的TimerTasks. TimerTask是一个抽象类,它的子类由 ...
- cms-幻灯片的实现
1.其实幻灯片的后台代码和之前的最新动态和推荐是一样的,只是前台遍历的时候不一样罢了 2.代码: 2.1:帖子mapper查询出幻灯片图片: <?xml version="1.0&qu ...
- 使用CreateProcess函数运行其他程序
为了便于控制通过脚本运行的程序,可以使用win32process模块中的CreateProcess()函数创建一个运行相应程序的进程.其函数原型如下.CreateProcess(appName, co ...
- COGS 1043. [Clover S2] Freda的迷宫
★ 输入文件:mazea.in 输出文件:mazea.out 简单对比时间限制:1 s 内存限制:128 MB Freda 的迷宫 (mazea.pas/.c/.cpp) 题目叙述 F ...
- httpd2.4.6三种工作模式(如何配置),防止占用内存暴增的策略
之前偷懒默认用yum安装了httpd.后来发现服务器内存暴增,一度达到75% 打开一看,好嘛后台休眠进程全是httpd. 重启之后再度访问发现内存还是稳步增长. [root@iz2ze3ayxs2yp ...
- 在PHP中读取二进制文件
很多时候,数据并不是用文本的方式保存的,这就需要将二进制数据读取出来,还原成我们需要的格式.PHP在二进制处理方面也提供了强大的支持. 任务 下面以读取并分析一个PNG图像的文件头为例,讲解如何使用P ...
- 深入理解计算机系统_3e 第九章家庭作业 CS:APP3e chapter 9 homework
9.11 A. 00001001 111100 B. +----------------------------+ | Parameter Value | +--------------------- ...
- 《剑指offer》【调整数组顺序使奇数位于偶数前面】(python版)
题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分 思路: 我认真看了一下,题目应该是要求在原地调整,所以这里不能再 ...
- 简单ssh
#!/usr/bin/env python #-*- coding:utf-8 -*- # datetime:2019/5/22 14:20 # software: PyCharm #服务端 impo ...
- 第22题:链表中倒数第k个结点
题目描述 题目:输入一个链表,输出该链表中倒数第k个结点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点.例如一个链表有6个结点,从头结点开始它们的值依次是1.2.3.4.5 ...