斐波那契数列指的是这样一个数列: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. kaggle预测房价的代码步骤

    # -*- coding: utf-8 -*- """ Created on Sat Oct 20 14:03:05 2018 @author: 12958 " ...

  2. 聊一聊 InnoDB 引擎中的索引类型

    索引对数据库有多重要,我想大家都已经知道了吧,关于索引可能大家会对它多少有一些误解,首先索引是一种数据结构,并且索引不是越多越好.合理的索引可以提高存储引擎对数据的查询效率. 形象一点来说呢,索引跟书 ...

  3. Oracle GoldenGate Best Practices: Active-Active Configuration with DML Auto CDR

    Executive Overview This document is an introduction to Oracle GoldenGate (DIPC remote agent)’s best ...

  4. UVA 最大面积最小三角形剖分

    点击打开题目 题目大意: 以顺时针或逆时针给出一个简单多边形的n个点的坐标,用n-2条互不相交的,且与边不相交的对角线,分成n-2个三角形,要求其中最大三角形的面积最小 开始还汪星人咬乌龟,无从下口, ...

  5. ReactNative---setState与性能的平衡

    setState用来更新RN的视图层显示,每一次setState操作都会更新整个 视图,于是对应的是性能消耗,在某些特殊情况下就会造成卡顿 app假死等问题: 因此个人使用setState中总结的原则 ...

  6. C++从array数组向vector向量复制元素的两种方式

    #include <iostream> #include <vector> using namespace std; int main() { const int arr_si ...

  7. nginx之历史回溯

    前言 nginx是一个web应用及反向代理工具,由一名俄罗斯程序员(Igor)发明的:NGINX是一个免费的,开源的高性能HTTP服务器和反向代理,以及IMAP / POP3代理服务器. NGINX以 ...

  8. sublime sftp插件安装及时更新网站

    Sublime Text 2 本身并不强大,但是它方便使用插件扩展功能,所以变得很强大.今天介绍一个很实用的插件 SFTP ,可以大大提高前端工作效率. 常见的工作流程 有时候修改一些网站上的文件,通 ...

  9. CSDN

    链接:https://blog.csdn.net/shaoyedeboke

  10. Arduino系列之按键模块(二)

    上一节简单介绍啦一下按键模块怎么使用 但是在使用过程中会常常出现延时时间过长,有时候按键会失灵 所以,接下来,我将优化程序,使得按键按下时,就能使count加1 下面是程序思路:同样的定义按键脚: 定 ...