【剑指Offer】斐波那契数列及其延伸问题——JavaScript实现
来源:互联网 发布:linux 最新内核 编辑:程序博客网 时间:2024/06/08 19:04
斐波那契数列问题
题目描述
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。
分析
斐波那契数列是这样一个数列,第1项、第2项都为1,后面每项是前两项之和:1,1,2,3,5,8,13,21,34...,即f(n)=f(n-1)+f(n-2)。这个问题用递归解决的话,核心代码只需两行,但是放在OJ上跑,可能AC不了,因为其中存在大量子问题重复计算的情况。我在OJ上试了一下,递归耗时是非递归的10倍以上,当然n越大,倍数也会越大的,《剑指Offer》指出,时间复杂度是以n的指数的方式递增的。所以下面用非递归实现:
function Fibonacci(n)//n是下标{ if(n === 0)return 0; if(n <= 2)return 1; var first = 1,second = 1; var result; for(var i=3;i<=n;i++){ result = first + second; first = second; second = result; } return result;}这段代码一开始我并没有添加第3行,结果死活AC不了,该OJ应该是认为:第0项是0,第1项是1,第2项是前两项之和,即为1,以此类推。。。总之逻辑没变。
跳台阶问题
题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
跳上n级台阶的跳法可认为f(n),第一次跳的时候有两种选择,一是第一次只跳1级,那么整个跳法就是剩下的n-1级台阶的跳法,及f(n-1);二是第一次跳2级,那么整个跳法就是剩下的n-2级台阶的跳法,及f(n-2)。所以整个n级台阶的跳法 f(n)=f(n-1)+f(n-2),这么一看,就成了斐波那契数列了。代码如下:
function jumpFloor(number){ var first = 1,second = 2; var result; if(number === 1)return first; if(number === 2)return second; for(var i=3;i<=number;i++){ result = first + second; first = second; second = result; } return result;}
变态跳台阶问题
题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
按照上面跳台阶问题的分析可推出,f(n)=f(n-1)+f(n-2)+f(n-3)+...+f(1)+f(0),其中f(0)表示,第一次直接跳了n级,剩下0级台阶的跳法即为f(0),不难看出,f(0)=1。同理f(1)=1。
而f(n-1)= f(n-2)+f(n-3)+...+f(1)+f(0),所以,f(n)=2f(n-1)。所以代码如下:
function jumpFloorII(number){ // write code here if(number <= 1)return 1; return 2 * jumpFloorII(number - 1);}上面代码虽然虽然是递归,但是不存在子问题重复计算的情况,因此AC该没问题。
阅读全文
0 0
- 【剑指Offer】斐波那契数列及其延伸问题——JavaScript实现
- 斐波那契数列延伸
- 《剑指offer》——斐波那契数列
- 剑指offer——斐波那契数列
- 斐波那契数列——剑指offer
- 剑指offer——斐波那契数列
- 剑指offer——斐波那契数列
- 剑指offer——7.斐波那契数列
- 剑指offer——斐波那契数列
- 剑指offer——斐波那契数列
- 剑指offer—斐波那契数列
- 剑指offer刷题—斐波那契数列
- 《剑指offer》—7、斐波那契数列
- 剑指offer(7)—斐波那契数列
- 剑指offer——斐波那契数列相关问题总结
- 面试题09_斐波那契数列及其变种详解——剑指offer系列
- 剑指Offer之斐波那契数列问题
- 剑指offer——斐波那契数列多种方法实现
- UML类图入门级介绍
- ElasticSearch6.0配置IK分词器
- java 基本数据类型和引用数据类型
- Ubuntu 16.04下搭建Web服务器(MySQL+PHP+Apache) 记录
- 学习网站
- 【剑指Offer】斐波那契数列及其延伸问题——JavaScript实现
- 背包的拖动和交换
- Revit二次开发_在Revit启动后创建Tab
- java中的注解
- 听课(上)
- 第20篇
- Win10 64位 + VS2015 +VTK7.0.0 +PCL1.8.0 +QT5.7的配置
- Mysql5.5&Mysql5.6&Mysql5.7特性
- python,mysqldb,web.py安装和配置