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

——摘自百度百科

leetcode上的有一道爬楼梯的题就相当于是兔子数列
https://leetcode-cn.com/problems/climbing-stairs/

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

注意:给定 n 是一个正整数。

示例 1

输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。
1.  1 阶 + 1 阶
2.  2 阶

示例 2

输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。
1.  1 阶 + 1 阶 + 1 阶
2.  1 阶 + 2 阶
3.  2 阶 + 1 阶

下面是三种js实现兔子数列的三种方法

递归

最容易想到的就是递归,根据递推式F(n)=F(n-1)+F(n-2) 很容易写出。

const climbStairs = n => {if (n <= 2) {return n}return climbStairs(n - 1) + climbStairs(n - 2)
}

很简单粗暴。
但是不能通过x 超出时间限制

循环(不使用数组)

这也是比较容易想到的。
使用一个中间值tmp保存前n-1项的和,通过循环求得第n个值

const usagi = n => {if (n <= 2) {return n}let a = 1, b = 2, tmp = 0for (let i = 3; i <= n; i++) {tmp = a + ba = bb = tmp}return tmp
}

循环(使用数组)

使用数组循环相当于是对上面的循环的优化(?),省略了中间值tmp
直接将求得的和放入数组中。arr[n]就是求得的值。
需要注意的一点是,数组下标是0开始的。所以初始值取的是[1, 1]

const climbStairs = n => {let arr = [1, 1]for (let i = 2; i <= n;i++) {arr[i] = arr[i - 1] + arr[i - 2]}return arr[n]
}

兔子数列(斐波拉契数列)javscript的三种写法相关推荐

  1. 【C语言--斐波拉契数列】

    斐波拉契数列 斐波拉契数列 递归实现 循环实现 斐波拉契数列 递归实现 int Feibo(int n) {if(n==1||n==2){return 1;}else{return Feibo(n-1 ...

  2. 深入剖析斐波拉契数列

    深入剖析斐波拉契数列 前言 动态规划作为一种非常经典的一类算法,不仅在解决实际问题当中有很多实际的应用,同时通常也是面试的一个重点.本篇文章一步步剖析动态规划的基本原理,通过斐波拉契数列问题(优化时间 ...

  3. 经典算法(6)斐波拉契数列、兔子繁殖、跳台阶算法

    写在前面: 我是「扬帆向海」,这个昵称来源于我的名字以及女朋友的名字.我热爱技术.热爱开源.热爱编程.技术是开源的.知识是共享的. 这博客是对自己学习的一点点总结及记录,如果您对 Java.算法 感兴 ...

  4. 斐波拉契数列,有人买了一对小兔子,已知小兔子一个月后长成大兔子,大兔子每个月生一对小兔子,问:两年(24个月)之后,他一共有几对兔子。

    [01]斐波拉契数列,有人买了一对小兔子,已知小兔子一个月后长成大兔子,大兔子每个月生一对小兔子,问:两年(24个月)之后,他一共有几对兔子. 第i月份 大兔子 小兔子 总兔子 1 0 1 1 2 1 ...

  5. 斐波拉契数列python写法

    文章目录 第一种:递推方法 第二种:递归方式 第三种:用一个类写出比较全面的斐波拉契 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonard ...

  6. 有趣的兔子(斐波那契数列)

    有趣的兔子(斐波那契数列) 如果每对兔子每月繁殖一对子兔,而子兔在出生后第二个月就有生殖能力,试问一对兔子一年能繁殖多少对兔子?可以这样思考:第一个月后即第二个月时,1对兔子变成了两对兔子,其中一对是 ...

  7. Python输出斐波拉契数列

    斐波拉契数列 1.什么是斐波拉契数列 2.用Python代码输入数列前30项 遇到问题不要迷茫,多思考,多问,这样你才能越发优秀 1.什么是斐波拉契数列 斐波那契数列(Fibonacci sequen ...

  8. 【Java系列】斐波拉契数列

    介绍 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为"兔子数列&q ...

  9. [python]练习之递归和循环实现斐波拉契数列

    1 # 程序功能:用递归和循环实现斐波拉契数列 2 # 0 1 1 2 3 5 8 13 21 34 3 4 def digui_fibo(number): 5 if number == 1: 6 r ...

  10. 函数-生成器之斐波拉契数列

    斐波拉契数列:除第一个和第二个数外,任意一个数都可以由前两个数相加而来. 无法用生成式,但可由函数生成. 函数生成斐波拉契数列数列: def fib(max):n,a,b=0,0,1while n & ...

最新文章

  1. 自定义Spinner之IconSpinner
  2. Twiiter,下一个热点
  3. 如何把单精度二进制数转换成十进制数?
  4. 【问题解决】ESP32 Brownout detector was triggered,log报错Brownout解决方法
  5. MyBatis常用配置解析-mapper标签
  6. 卷积神经网络训练模拟量化实践
  7. 初谈逻辑读、物理读、预读
  8. python发邮件详解_python实现发送邮件详解
  9. 从富文本中截取图片_JS 获取富文本中的第一张图片 (正则表达式)
  10. 这个 80 后 IT 男厉害了!他用北京蜗居的首付在东京海淘了一栋楼!
  11. 网页在兼容模式和急速模式下前者报错、后者正常的原因查找
  12. Atitit ati teck trend技术趋势资料包 C:\onedriver\OneDrive\Documents\0 it impttech topic\ati teck trend技术趋
  13. WPF学习笔记——4)使用StackPanel面板进行简单布局
  14. c语言递归算法兔子问题,Java递归算法经典实例(经典兔子问题)
  15. 【企业微信点餐系统】
  16. plsql下载安装及基本使用
  17. linux 更新包缓存目录,清除ubuntu下缓存、软件安装包和多余内核
  18. 转载:程序员必备的8个学习工具
  19. Python列表排序_revered逆序_max_min_sum
  20. 汉语拼音文件搜索项目

热门文章

  1. 如何正确的使用检测软件——以知网跟paperpass为例
  2. 2021哈工大软件构造Lab3
  3. 盘点国内十大免费CDN提供商
  4. Python新建一个文件目录,python怎么创建新文件
  5. 跨专业上海理工大学计算机考研,跨考难度低,种类多的专业,你知道几个?
  6. 优酷youku 1080P 视频下载方法
  7. STM32精英版(正点原子STM32F103ZET6开发板)学习篇13——ssd1306OLED实验
  8. 人工神经网络持续学习的脑激励重放
  9. MIT-BIH心律失常数据库目录(译)
  10. 计算机组装从光盘启动,如何用光盘安装电脑系统