Javascript实现斐波那契数列多种方法——【循环、递归】

JS实现斐波那契数列的五种方式(小结) 主要介绍了JS实现斐波那契数列的五种方式(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 立即下载

斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)

循环

var fib = function(n) {
    let pre = 0;
    let next = 1;
    if(n==0){return pre};
    if(n==1){return next};

    let cur = 0;
    for(let i = 2;i <= n;i++){
        cur = pre + next;
        pre = next;
        next = cur;
    }   
    return next;
};

普通递归思想

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

console.log(fibonacci(20));//6765

正常递归代码逻辑清晰,但是会有一个问题即存在大量的重复计算。如:当n为5的时候要计算fibonacci(4) + fibonacci(3)当n为4的要计算fibonacci(3) + fibonacci(2) 。
对其进行优化,去除重复计算:

function fib(n){
   function fib_(n,a,b){
       if(n==0){
       		return a;//0是第0项,a就是要找的最终的数
       }  
       else{
       		return fib_(n-1,b,a+b);
       		//每次将b赋值给a,避免了重复计算
       }
   }
   return fib_(n,0,1)
}

下面这个方法和上面这个思想基本相同,但只不过是使用闭包实现。

const fibonacci = function(){
  var mem = [0,1];
  var f = function(n){
	    var res = mem[n];
	    if(typeof res !== 'number'){
	      mem[n] = f(n-1) + f(n-2);
	      res = mem[n];
	    }
	    return res;	
  }
  return f;
}();

箭头函数

let fib = n => n > 1 ? fib(n-1) + fib(n-2) : n

leetcode70题:爬楼梯
假设你正在爬楼梯。需要 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 阶
//看了半天发现是斐波那契数列...
//普通递归超出时间限制
var climbStairs = function(n) {
    function fib_(n,a,b){
       if(n==1){
       		return a;
       }  
       else{
       		return fib_(n-1,b,a+b);
       		//每次将b赋值给a,避免了重复计算
       }
   }
   return fib_(n,1,2)
    // return climbStairs(n-1)+climbStairs(n-2);
};
//循环写试试
var climbStairs = function(n) {
    if(n<=2){return n}
    let a = 1;
    let b = 2;
    let res = 0;
    for(let i=3;i<=n;i++){
        res = a+b;
        a = b;
        b = res;
    }
    return res;
};
树莓派CSI/DSI二合一接口深度玩法:同时驱动MIPI摄像头和屏幕的配置秘籍 本文详细解析了树莓派5上CSI/DSI二合一接口的深度玩法,提供了同时驱动MIPI摄像头和屏幕的完整配置秘籍。从硬件连接到软件设置,包括config.txt的优化配置,帮助用户充分利用树莓派5的双多功能接口,实现高效的双设备工作模式。 阅读详情

相关推荐

hi3519dv500 os04a10输入调试

因该sensor接在soc端的iic6,在驱动中(Hi3519DV500_SDK_V2.0.1.1\smp\a55_linux\source\mpp\cbb\isp\user\sensor\hi3519dv500\omnivision_os04a10\os04a10_sensor_ctl.c)注意总线的选择。mem_process_isolation=1 改为 mem_process_isolation=0。2、OT_MIPI_SET_HS_MODE配置为LANE_DIVIDE_MODE_1。

linus 3164

前端[编程题] fibonacci

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

weixin_39531565的博客 218

AD9371 官方例程构建及单音信号收发

项目构建基本流程和AD9361差不多,由于官方使用的ZCU102,记录下移植遇到的一些问题最终接收到正确的正弦波Errors: 0Errors: 0Errors: 0Errors: 0AD9361。

weixin_44630490的博客 2971

【js算法】js斐波那契数列的多种算法

斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……从数列可以看出,从第三项开始,每一项都是前两项的和,f(n) = f(n-1) + f(n-2) 那么用js怎么求斐波那契数列第n项的值呢? 1.普通递归计算: function fibonacci(n){ if(n == 1||n == 2) retu

qq_39576711的博客 6771

RouterOS网桥VLAN实战:从零构建安全隔离的二层虚拟网络

本文详细讲解了如何在RouterOS上利用网桥和VLAN功能,从零开始构建安全隔离的二层虚拟网络。通过分步实战演示,涵盖核心概念、网桥创建、PVID设置、VLAN规则配置及安全过滤,帮助网络管理员实现办公、访客与服务器网络的逻辑隔离与灵活管理,提升网络安全性。

u9v0w的博客 504

量子密钥分发系统的设计与实现(二):光路子系统初步讨论

本文主要对量子密钥分发系统中的光路子系统方案进行了讨论。

量子领域相关话题 2406

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

JS写斐波那契数列的几种方法   斐波那契数,指的是这样一个数列:1、1、2、3、5、8、13、21、……在数学上,斐波那契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=Fn-1+Fn-2(n>=2,n∈N*),用文字来说,就是斐波那契数列由 0 和 1 开始,之后的斐波那契数列系数就由之前的两数相加。     常用的计算斐波那契数列的方法分为两大类:递归和循环。 递归 方法一:普通递归   代码优美逻辑清晰。但是有重复计算的问题,如:当n为5的时候要计算fibonacci(4)

qq_47443027的博客 2004

在C++中,NULL和nullptr有什么区别?

这两个定义导致了冲突,C++中的NULL如果和C语言一样也是(void *)0指针,而C++不允许void*隐式转换成其它指针类型,那NULL就无法表示空指针了。因此,使用 nullptr可以增加代码的清晰性,避免类型安全问题。即使在混合C++和C代码时,nullptr也提供了一个明确无误的空指针表示,达到兼容的目的。C++11 引入 nullptr 彻底解决了这些问题,提高语言的安全性、清晰性和现代性。在了解NULL和nullptr背后的故事之后,相信大家以后再也不会用NULL了。

hebhljdx的博客 678

JS求斐波那契数列值之递归方法

简单粗暴的递归方法 var Fibonacci = (n) => { if (n <= 2) { return 1 } return Fibonacci1(n - 1) + Fibonacci1(n - 2) } 缺点: 会进行很多的重复计算,比如求Fibonacci会计算Fibonacci(49)+Fibonacci(48)这两个数每一次都相当于单独进行计算处理,其中Fibonacci(49) 还会用到Fibonacci(48) +Fibonacci(47) ...

QWE123432SD的博客 495

NCCL 核心集体通信操作深度解析:从原理到优化实践

操作逻辑:若 N 个 GPU 各持有一段数据(大小为 S),通信后每个 GPU 会持有所有 N 段数据(总大小为 N×S)。典型场景:多卡推理结果聚合、模型并行中间结果同步。操作逻辑:N 个 GPU 各持有数据,通过归约(求和、取平均等)运算后,所有 GPU 获得相同结果。典型场景:数据并行训练的梯度聚合(如 SGD 优化器)。操作逻辑:N 个 GPU 各持有 N 份数据分片,通信后每个 GPU 获得所有 GPU 的对应分片。典型场景。

jundao1997的专栏 679

6.Burp Suite 入门篇 —— Burp Scanner 漏洞扫描

Burp Scanner 既可以是独立的全自动扫描器,也可以在手动测试中当作强大的辅助手段,而且随着技术改进,Burp Scanner 能检测到的漏洞数量也在不断增加。Burp Scanner 功能只在 burpsuite 专业版和企业版中里有,本篇教程讲的是专业版的 Burp Scanner 用法。

YouTheFreedom的博客 1万+

JavaScript函数递归-斐波那契数列

一、递归的定义 要想了解递归,我们首先要了解递归的定义,什么是递归呢?若一个对象部分地包含它自己, 或用它自己给自己定义, 则称这个对象是递归的;若一个过程直接地或间接地调用自己, 则称这个过程是递归的过程。 二、递归的分类 知道了递归的定义,我们再说一下递归的分类,递归分为两种,直接递归和间接递归。直接递归就是自己调用自己。而间接递归可以理解为是A调用了B,而B又调用了A。 三、递归的组...

qq_43497650的博客 3154

一文搞懂数据标注

数据标注即通过分类、画框、标注、注释等,对图片、语音、文本等数据进行处理,标记对象的特征,以作为机器学习基础素材的过程。简言之,就是需要给数据做好标注,这样机器就能知道学习哪些内容。

女王の专属领地 9936

Web前端之JavaScript的递归

Web前端之JavaScript的递归

优快云博客主页地址:https://mengjian.blog.youkuaiyun.com/ 1976

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

斐波那契数列打印的五种方法

如下 let arr=[0,1,1] function test(n){ if(n<3){ return arr[n] } if(arr[n]!==undefined){ return arr[n] } let data= test(n-1)+test(n-2 )//如果没有return data的话是娶不到值的 arr[n]=data return data } test(6) console.log(arr,"te

weixin_49554199的博客 1589

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

JavaScript 实现斐波那契数列的多种方法详解

JavaScript 实现斐波那契数列的多种方法详解

嗨,欢迎来到我的 优快云 博客小天地!一名深耕多年的技术发烧友。在这里,我将把日常工作中积累的宝贵经验,从复杂架构设计的精妙之处,到代码优化的实战技巧,毫无保留地分享给大家。 7083

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

js之- 斐波那契数列的递归和循环方法

斐波那契数列:1、1、2、3、5、8、13、21、34、55。。。。 文字描述:开头两位为1,从第三位起,每一项都等于前2位相加求和 方法一:递归 function fibo(n){ if( n == 0 || n == 1 ) return 1; return fibo(n-1) + fibo(n-2); } 思路: 从0开始,前两项,都 return 出数字1 从第三项,即数字...

qq_41797950的博客 2881

JS实现斐波那契数列的几种方法

斐波那契数列指的是这样一个数列: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){  ...

algor1234567的博客 2418

JS用For循环实现斐波那契数列(及尾递归优化)

斐波那契数列指的是这样一个数列: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)* 递归实现 function Fibo(n) { if(n <= 0) { return -1; //输入的n不合法,返回-1 } if(n <= 2) { ...

weixin_43359898的博客 4895

python斐波那契数列for循环_python 递归\for循环_斐波那契数列

# 递归def myAdd(a, b):c = a + bprint(c)if c > 100:returnreturn myAdd(a + 1, c) #最大递归深度是1000myAdd(2, 3)# 功能同上递归a = 2b = 3for i in range(1000):c = a + bprint(c)a += 1b = cdef myFibo(a, b):c = a + bprint...

weixin_39531229的博客 2991

斐波那契数列(各种代码实现斐波那契数列)

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

酷爱前端的小陈博客 7848

【JS】斐波那契数列实现(递归与循环)

斐波那契数列实现【递归与循环】 1.循环 <script> var line = parseInt(prompt("input lines:")); var a = 1, b = 1; for (var i = 0; i < line / 2; i++) { document....

RedMaple 1394

JavaScript实现斐波那契数列

斐波那契数列(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 ∈ ...

furfur-jiang的博客 2103

JavaScript写斐波那契数列的几种方式

什么是斐波那契数列: 斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=1,F(1)=1, F(n)=F(n-1)+F(n-2)(n&gt...

小冷_Blog 2万+

js实现斐波那契数列的几种方法

递归 方法一:普通递归 function fibonacci(n) { if (n == 1 || n == 2) { return 1 }; return fibonacci(n - 2) + fibonacci(n - 1); } fibonacci(30) 方法二:改进递归-把前两位数字做成参数避免重复计算 function fibonacci(n) { function fib(n, v1, v2) { if (n == 1)

weixin_29947843的博客 1519

js递归实现斐波那契数列及优化

斐波那契数列: 斐波那契数列指的是这样一个数列: “ 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,…” 这个数列从第3项开始,每一项都等于前两项之和。 递归求斐波那契数列 ​ 这个函数的功能是求任意项的斐波那契数列 //统计计算次数 let count = 0 function fibNumber(n) { count++ if (n

乐观李菇凉 2739
上一篇: JS 的构造函数、原型和原型链
下一篇: MySQL ERROR 1025 - Error on rename of ‘...‘ 和1005 - Can‘t create table ...中可能存在的问题
impact_factor
博客等级 码龄6年 32粉丝 44原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值