斐波那契数列是数学领域内一个非常经典的算法问题(算法渣写下这句话的时候都在瑟瑟发抖),今天就用五分钟的篇幅来浅析一下这个问题。

什么是斐波那契数列?

1,1,2,3,5,8,13,21......
斐波那契数列从第三项开始,每一项都等于前两项之和。
斐波那契数列是由数学家 Leonardoda Fibonacci 以兔子繁殖为例子而提出的,所以也叫做“兔子数列”

当然了,为了和计算机领域结合起来,这个问题会变成:实现一个函数f(n),求斐波那契数列的第n项是多少?(n始终为正整数)

采用递归实现

有编程经验的你一定会想到递归。好的开始是成功的一半,如果你能想到递归,那么离成功已经不远了。
不难看出,数列的递推规律可以总结为:

f(n) = f(n-1) + f(n-2)
复制代码

okay,挽起袖子开撸

function fibonacci(num){if (num <= 2){return 1;}else{return fibonacci(num - 1) + fibonacci(num - 2);}
}
复制代码

乍一看,完美。
不过这个时候,但凡是个稍微有点追求的 Developer 都会说:“大兄弟你这么搞不是最优解呀,数字稍微大一点就炒鸡慢了。”

有缓存的 Fibonacci

虽然人艰不拆,但是优化还是要做的。
我不禁想到了前端性能优化里面最常见且好用的一条:缓存。大概的思路就是,将新算出来的值保存起来以便下一次使用。
Talk is cheap, show u the code

let fibo = (function(){let cache = [];return function(n){if (cache[n] !== undefined){return cache[n];}else{return cache[n] = (n <= 2) ? 1 : fibo(n - 1) + fibo(n - 2);}}
})();
复制代码

乍一看,又是完美。
还能优化吗?当然。
这里用数组作为缓存容器,当计算过 fibo(50) 时,数组的长度是51,在给最后一项赋值之前,js会将前50项都置为 undefined,自然会影响效率。
一行代码完成优化:

// let cache = [];
let cache = {};
复制代码

生命不息,优化不止

优化是门学问,如果你还不肯善罢甘休的话,我也只能送你到这里了,毕竟本文的目的旨在帮你回忆起这么一道经典的题目(逃)。
如果某位数学大神看到了我这篇渣渣文,肯定会十分不屑的反手就是一个通项公式,emmmmm你开心就好。

最后

新年快乐 : )

五分钟重温斐波那契数列相关推荐

  1. python兔子繁殖问题中如何输出相应月份的数列_斐波那契数列介绍及Python中五种方法斐波那契数列...

    Q:斐波那契数列为何那么重要,全部关于数学的书几乎都会提到? A:由于斐波那契数列在数学和生活以及天然界中都很是有用.html 1. 斐波那契数列 概念引入 斐波那契数列(Fibonacci sequ ...

  2. 斐波那契数列介绍及Python中五种方法斐波那契数列

    Q:斐波那契数列为什么那么重要,所有关于数学的书几乎都会提到? A:因为斐波那契数列在数学和生活以及自然界中都非常有用. 1. 斐波那契数列 概念引入 斐波那契数列(Fibonacci sequenc ...

  3. 循环斐波那契数列_第五课:斐波那契数列(第一课时)

    简介:又称黄金分割数列.因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为"兔子数列",指的是这样一个数列:1.1.2.3.5.8.13.21.34--在数学上,斐波那契数 ...

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

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

  5. c语言减治法求a的n次方算法,拜托,面试别再问我斐波那契数列了!!!

    面试中,问得比较多的几个问题之一,求斐波那契数列f(n)? 画外音:姐妹篇 <拜托,面试别再问我TopK了!!!> <拜托,面试别再让我数1了!!!> 什么是斐波那契数列? 斐 ...

  6. 拜托,面试别再问我斐波那契数列了!!!

    面试中,问得比较多的几个问题之一,求斐波那契数列f(n)? 画外音:姐妹篇 <拜托,面试别再问我TopK了!!!> <拜托,面试别再让我数1了!!!> 什么是斐波那契数列? 斐 ...

  7. JAVA中打印斐波拉契数列_java打印斐波那契数列

    每行 5 个,输出斐波那契数列的前 20 个数字 6. 编写程序接受用户输入一个... 3 ? 这一公式输出斐波那契数列中的前 40 个数. 保存文件名为:bnds11.java class bnds ...

  8. python:生成器:斐波那契数列

    斐波那契数列指的是这样一个数列: 0.1.1.2.3.5.8.13.21.34.-- 这个数列从第3项开始,每一项都等于前两项之和. 生成器:一个返回迭代器的函数. 它看起来像一个普通函数,除了它包含 ...

  9. Java 鸡翁一值钱五Java_Java案例5:斐波那契数列,百钱百鸡

    1.斐波那契数列(不死兔子) public class Fbql { public static void main(String[] args) { // TODO Auto-generated m ...

最新文章

  1. magento常用软件
  2. Core禁用BIP70或只为制造闪电网络硬需求
  3. CSDN中Markdown编辑器的数学公式编写(非常详细!)
  4. Java IO (二),常见的输入/输出流
  5. python发明者叫什么-看看9种编程语言的发明者是怎么说的
  6. 第二章 数据结构(一)
  7. 「日常训练」Skills(Codeforce Round #339 Div.2 D)
  8. Windows10中的IIS10安装php manager和IIS URL Rewrite 2.0组件的方法
  9. 点击panel滚动条滚动到底部
  10. 年审是当月还是当天_车检是按月份还是日期 审车日期以什么为准
  11. cad设计院常用字体_如何把CAD图纸坐标转换成现场坐标?
  12. vs python opencv_VsCode+Anaconda+OpenCV开发环境搭建
  13. 算法学习(二)快速排序(下)
  14. ubuntu下mysql的master-slave,双master 及A-B-C级联主从配置说明
  15. 2020山东大学计算机组成原理课程设计报告
  16. 中国专利电子申请网CPC客户端的安装教程
  17. 单片机外文参考文献期刊_单片机-英文参考文献
  18. Python网络编程之网络基础
  19. 集群通信组件Tribes之整体介绍
  20. pytorch训练GAN的代码(基于MNIST数据集)

热门文章

  1. 简单分析几个常见的排序算法(C语言)
  2. 2021佛山市地区高考成绩排名查询,佛山市高中排名分数线,佛山高中排名2021最新排名...
  3. 分布式服务追踪与调用链系统
  4. linux主机电影源码,求::totem电影播放机源代码!!!!
  5. python中lt方法_Python的富比较方法__lt__、__gt__之间的关联关系分析
  6. pyqt5教程8:对话框
  7. Centos7修改Docker默认存储位置
  8. android 数据存储怎么保存图片_文章要保存为TXT文件,其中的图片要怎么办?Python帮你解决...
  9. 某班学生有50人会c语言的有40人,《离散数学》期末考试题目及评分标准
  10. 【Linux】4.Linux cat命令详解