斐波那契数列指的是这样一个数列:1、1、2、3、5、8、13、21、34、……

前两项为1,从第三项起,每一项等于前两项的和,即F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)

请用JS实现:输入斐波那契数列的项数,输出该项的值

方法1:递归

function fibonacci(n){
  if(n==1||n==2){
    return 1
  }else{
    return fibonacci(n-1)+fibonacci(n-2)
  }
}

递归方式是大多数人的常规思路,但是使用递归求一个较大项的值十分耗费性能,不推荐使用!

console.time('fibo-runtime')
console.log(fibonacci(50))
console.timeEnd('fibo-runtime')

12586269025 
  fibo-runtime: 131143.2421875ms

方法2:循环

function fibo—cycle(n){
  var num1 = 1,num2 = 1,sum;
  for(var i = 3; i < n; i++){
    sum = num1 + num2; //用sum累加前两个数之和
    num1 = num2;
    num2 = sum;
  }
  if(n==1||n==2){
    return 1
  }else{
    return sum
  }
}
console.log(fibo_cycle(5))   //5
 

方法3:数组

function fibo_arr(n){
var arr = [0,1,1]
if(n<0){
throw new Error('输入的数字不能小于0')
}
if(n>=3){
for(var i = 3; i <= n; i++){
arr[i] = arr[i-1]+arr[i-2]
}
}
return arr[n]
} console.log(fibo_arr(5)) //5

方法4:闭包

function fibo(n){
if(n<0){
throw new Error('输入的数字不能小于0')
}
let arr = [0,1,1];
function recursion(n){
if(n<3){
return arr[n]
}
if(arr[n]!==undefined){
return arr[n]
}
let data = recursion(n-1)+recursion(n-2)
arr[n] = data //将data保存,避免重复求值
return data
}
return recursion(n)
}
console.log(fibo_arr(5))    //5
 

JS实现斐波那契数列的几种方法的更多相关文章

  1. JS写斐波那契数列的几种方法

    斐波那契数,指的是这样一个数列:1.1.2.3.5.8.13.21.……在数学上,斐波那契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=Fn-1+Fn-2(n>=2,n∈N*),用文字 ...

  2. JS实现斐波那契数列的五种方式

    下面是五种实现斐波那契数列的方法 循环   function fibonacci(n){ var res1 = 1; var res2 = 1; var sum = res2; for(var i = ...

  3. 方法输出C++输出斐波那契数列的几种方法

    PS:今天上午,非常郁闷,有很多简单基础的问题搞得我有些迷茫,哎,代码几天不写就忘.目前又不当COO,还是得用心记代码哦! 定义: 斐波那契数列指的是这样一个数列:0, 1, 1, 2, 3, 5, ...

  4. C++输出斐波那契数列的几种方法

    定义: 斐波那契数列指的是这样一个数列:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ... 这个数列从第三项开始,每一项都等于前两项之和. 以输出斐波那 ...

  5. Python中斐波那契数列的四种写法

    在这些时候,我可以附和着笑,项目经理是决不责备的.而且项目经理见了孔乙己,也每每这样问他,引人发笑.孔乙己自己知道不能和他们谈天,便只好向新人说话.有一回对我说道,“你学过数据结构吗?”我略略点一点头 ...

  6. 斐波那契数列的5种python实现写法

    斐波那契数列的5种python写法       斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖 ...

  7. 斐波那契数列的三种C++实现及时间复杂度分析

    本文介绍了斐波那契数列的三种C++实现并详细地分析了时间复杂度. 斐波那契数列定义:F(1)=1, F(2)=1, F(n)=F(n-1) + F(n-2) (n>2) 如何计算斐波那契数 F( ...

  8. JS 从斐波那契数列浅谈递归

    一.前言 昨晚下班后,经理出于兴趣给我们技术组讲了讲算法相关的东西,全程一脸懵逼的听,中途还给我们出了一道比较有趣的爬楼问题,问题如下: 假设一个人从地面开始爬楼梯,规定一步只能爬一坎或者两坎,人只能 ...

  9. 斐波那契数列 的两种实现方式(Java)

    import java.util.Scanner; /* 斐波那契数列:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ... 如果设F(n)为该数列的第n ...

随机推荐

  1. Django后台管理系统的使用

    目录 django后台管理系统的使用 检查配置文件 检查根urls.py文件 启动项目,浏览器输入ip端口/admin 如: 127.0.0.1/8000/admin 回车 注册后台管理系统超级管理 ...

  2. 使用log4j把日志写到mysql数据库

    log4j可以支持将log输出到文件,数据库,甚至远程服务器,本教程以mysql数据库为例来讲解: 作者:Jesai 没有伞的孩子,只能光脚奔跑! 1.数据库设计 数据库表 表4-1日志表(log) ...

  3. git 多人协同开发

    一.允许他人操作程序(两种方式) 1.添加合作者 2.创建组织 二.分支 每个开发者创建一个属于他们的dev分支 三.合并规则 1.一起合并(代码会出现冲突) 2.尽量缩短合并的周期

  4. 实用代码|javaMail发送邮件(文末重磅资源!)

    每天进步一点点,距离大腿又近一步!阅读本文大概需要5分钟 JavaMail发送邮件,简单实用,了解一下呗~ 1.开启邮箱MAP/SMTP服务,获取第三方授权码 以QQ邮箱为例 2.主要代码 maven ...

  5. GP工作室的项目计划书

    目录 零点六一八--项目计划书 一.团队简介 1.1团队名称:GP工作室(Gold Point Studio) 1.2团队成员 1.3成员简介 1.4团队特色 二.项目介绍 2.1项目名称: 零点六一 ...

  6. python从excel中读取数据传给其他函数使用

    首先安装xlrd库 pip install xlrd 方法1: 表格内容如下: 场景描述,读取该表格A列数据,然后打印出数据 代码何解析如下: import xlrd #引入xlrd库 def exc ...

  7. kafka for centos7

    https://blog.csdn.net/wqh8522/article/details/79163467

  8. ios--->const 用法总结

    const 用法总结 宏.变量.常量区分 宏:只是在预处理器里进行文本替换,没有类型,不做任何类型检查,编译器可以对相同的字符串进行优化.只保存一份到 .rodata 段.甚至有相同后缀的字符串也可以 ...

  9. 手把手教你用C#做疫情传播仿真

    手把手教你用C#做疫情传播仿真 在上篇文章中,我介绍了用C#做的疫情传播仿真程序的使用和配置,演示了其运行效果,但没有着重讲其中的代码. 今天我将抽丝剥茧,手把手分析程序的架构,以及妙趣横生的细节. ...

  10. NLP(十九)首次使用BERT的可视化指导

      本文(部分内容)翻译自文章A Visual Guide to Using BERT for the First Time,其作者为Jay Alammar,访问网址为:http://jalammar ...