兔子数列(斐波拉契数列)javscript的三种写法
斐波那契数列(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的三种写法相关推荐
- 【C语言--斐波拉契数列】
斐波拉契数列 斐波拉契数列 递归实现 循环实现 斐波拉契数列 递归实现 int Feibo(int n) {if(n==1||n==2){return 1;}else{return Feibo(n-1 ...
- 深入剖析斐波拉契数列
深入剖析斐波拉契数列 前言 动态规划作为一种非常经典的一类算法,不仅在解决实际问题当中有很多实际的应用,同时通常也是面试的一个重点.本篇文章一步步剖析动态规划的基本原理,通过斐波拉契数列问题(优化时间 ...
- 经典算法(6)斐波拉契数列、兔子繁殖、跳台阶算法
写在前面: 我是「扬帆向海」,这个昵称来源于我的名字以及女朋友的名字.我热爱技术.热爱开源.热爱编程.技术是开源的.知识是共享的. 这博客是对自己学习的一点点总结及记录,如果您对 Java.算法 感兴 ...
- 斐波拉契数列,有人买了一对小兔子,已知小兔子一个月后长成大兔子,大兔子每个月生一对小兔子,问:两年(24个月)之后,他一共有几对兔子。
[01]斐波拉契数列,有人买了一对小兔子,已知小兔子一个月后长成大兔子,大兔子每个月生一对小兔子,问:两年(24个月)之后,他一共有几对兔子. 第i月份 大兔子 小兔子 总兔子 1 0 1 1 2 1 ...
- 斐波拉契数列python写法
文章目录 第一种:递推方法 第二种:递归方式 第三种:用一个类写出比较全面的斐波拉契 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonard ...
- 有趣的兔子(斐波那契数列)
有趣的兔子(斐波那契数列) 如果每对兔子每月繁殖一对子兔,而子兔在出生后第二个月就有生殖能力,试问一对兔子一年能繁殖多少对兔子?可以这样思考:第一个月后即第二个月时,1对兔子变成了两对兔子,其中一对是 ...
- Python输出斐波拉契数列
斐波拉契数列 1.什么是斐波拉契数列 2.用Python代码输入数列前30项 遇到问题不要迷茫,多思考,多问,这样你才能越发优秀 1.什么是斐波拉契数列 斐波那契数列(Fibonacci sequen ...
- 【Java系列】斐波拉契数列
介绍 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为"兔子数列&q ...
- [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 ...
- 函数-生成器之斐波拉契数列
斐波拉契数列:除第一个和第二个数外,任意一个数都可以由前两个数相加而来. 无法用生成式,但可由函数生成. 函数生成斐波拉契数列数列: def fib(max):n,a,b=0,0,1while n & ...
最新文章
- 自定义Spinner之IconSpinner
- Twiiter,下一个热点
- 如何把单精度二进制数转换成十进制数?
- 【问题解决】ESP32 Brownout detector was triggered,log报错Brownout解决方法
- MyBatis常用配置解析-mapper标签
- 卷积神经网络训练模拟量化实践
- 初谈逻辑读、物理读、预读
- python发邮件详解_python实现发送邮件详解
- 从富文本中截取图片_JS 获取富文本中的第一张图片 (正则表达式)
- 这个 80 后 IT 男厉害了!他用北京蜗居的首付在东京海淘了一栋楼!
- 网页在兼容模式和急速模式下前者报错、后者正常的原因查找
- Atitit ati teck trend技术趋势资料包 C:\onedriver\OneDrive\Documents\0 it impttech topic\ati teck trend技术趋
- WPF学习笔记——4)使用StackPanel面板进行简单布局
- c语言递归算法兔子问题,Java递归算法经典实例(经典兔子问题)
- 【企业微信点餐系统】
- plsql下载安装及基本使用
- linux 更新包缓存目录,清除ubuntu下缓存、软件安装包和多余内核
- 转载:程序员必备的8个学习工具
- Python列表排序_revered逆序_max_min_sum
- 汉语拼音文件搜索项目