JavaScript递归

前端面试大全·JavaScript递归

🌟经典真题

🌟递归

🌟真题解答

🌟总结


🌟经典真题

  • 使用递归完成 1 到 100 的累加

🌟递归

A recursive method is a method that calls itself.

递归调用是一种特殊的调用形式,指的是方法自己调用自己的形式。

下面是一个递归的示例:

function neverEnd() {
    console.log("This is the method that never ends!");
    neverEnd();
}

method 会先输出 This is the method that never ends! 然后再调用自己,导致无限递归(infinite recursion)。当然这一般是我们需要避免的状况。

在进行递归操作的时候,我们需要满足以下几个条件:

  • 递归调用必须有结束条件
  • 每次调用的时候都需要根据需求改变传递的参数内容

下面是递归的一个示例,求某个数的阶乘。

function factorial(x) {
    if (x === 1) {
        return 1;
    } else {
        return x * factorial(x - 1);
    }
}
console.log(factorial(5)); // 120

整个递归的计算过程如下:

===> factorial(5)
===> 5 * factorial(4)
===> 5 * (4 * factorial(3))
===> 5 * (4 * (3 * factorial(2)))
===> 5 * (4 * (3 * (2 * factorial(1))))
===> 5 * (4 * (3 * (2 * 1)))
===> 5 * (4 * (3 * 2))
===> 5 * (4 * 6)
===> 5 * 24
===> 120

 

使用递归时需要注意如下事项:

  • 递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以用循环的方式来实现。

  • 使用递归时需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当一个函数调用,栈就会加一层,每当函数返回,栈就会减一层。由于栈的大小不是无限的,所以递归调用的次数过多,会导致栈溢出。

下面再来看几个递归的示例:

示例 1:使用递归来计算从 x 加到 y 的结果

function calc(i, j) {
    if (i == j) {
        return i;
    }
    return calc(i, j - 1) + j;
}
console.log(calc(1, 100)); // 5050

示例 2:使用递归来计算斐波那契数列

function calc(i) {
    if (i == 1) {
        return 1;
    } else if (i == 2) {
        return 2;
    } else {
        return calc(i - 1) + calc(i - 2);
    }
}
console.log(calc(7)); // 21

🌟真题解答

  • 使用递归完成 1 到 100 的累加

参考答案:

function calc(i, j) {
    if (i == j) {
        return i;
    }
    return calc(i, j - 1) + j;
}
console.log(calc(1, 100)); // 5050

🌟总结

本篇文章是关于JavaScript的一道面试题,后续还会持续更新HTML、CSS、JavaScript、Node.js、Vue.js、网络等前端相关面试题。如果文中出现有瑕疵的地方各位通过评论或者私信联系我,我们一起进步,有兴趣的伙伴可以关注订阅: 前端面试题大全   

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/215836.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Arrays类练习 - Java

案例:自定义Book类,里面包含name和price,按price排序(从大到小)。要求使用两种方式排序,有一个 Book[] books 4本书对象。 使用前面学习过的传递实现Comparator接口匿名内部类,也称为定制排序。可以按照price (1)从大到…

【Element】el-table组件使用summary-method属性设置表格底部固定两行并动态赋值

一、背景 需求:在表格账单中底部添加两行固定行,来统计当前页小计和总计。element ui 官网上是直接将本列所有数值进行求合操作的,且只有固定一行总计。目前的需求是将接口返回的数据填充到底部固定的两行中 二、底部添加两行固定行 2.1、…

CPP-SCNUOJ-Problem P20. [算法课回溯]优美的排列

Problem P20. [算法课回溯]优美的排列 假设有从 1 到 n 的 n 个整数。用这些整数构造一个数组 perm(下标从 1 开始),只要满足下述条件 之一 ,该数组就是一个 优美的排列 : perm[i] 能够被 i 整除 i 能够被 perm[i] 整…

2024 年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-B

2024 年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-B 目录 2024 年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-B 需要环境或者解析可以私信 (二)A 模块基础设施设置/安全加固(200 分&…

在sCrypt网站上铭刻Ordinals

sCrypt发布了一个新的Ordinals铭刻工具,连接Panda Wallet后即可使用。你可以观看我们录制的视频教程,获得更多细节。 铭刻工具同时支持BSV主网(mainnet)和测试网(testnet),你可以在我们的官方网…

2023年道路运输企业主要负责人证模拟考试题库及道路运输企业主要负责人理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2023年道路运输企业主要负责人证模拟考试题库及道路运输企业主要负责人理论考试试题是由安全生产模拟考试一点通提供,道路运输企业主要负责人证模拟考试题库是根据道路运输企业主要负责人最新版教材&#…

Python基础快速过一遍

文章目录 一、变量及基本概念1、变量2、变量类型3、变量格式化输出4、type()函数5、input()函数6、类型转换函数7、注释 二、Python运算/字符1、算数运算2、比较运算3、逻辑运算4、赋值运算符5、转义字符6、成员运算符 三、判断/循环语句1、if判断语句2、while循环语句3、for循…

手写VUE后台管理系统8 - 配置404NotFound路由

设置404页面 配置路由404页面 配置路由 这里配置了两个路由,一个是主页,另外一个则匹配任意路由显示为404页面。因为只配置了两个路由,如果路径没有匹配到主页,则会被自动导向到404页面,这样就可以实现整站统一的404页…

无惧泄密:揭秘上海迅软DSE防拷贝大杀器!

对于企事业单位而言,文档的安全保护不仅要从源头上进行,杜绝文档在使用、传播过程中产生的泄密风险,同时也要对文档内容本身进行保护。为防止有心人通过拷贝、截屏、拍照等方式盗窃走重要文档内容信息的情况,天锐绿盾文件防泄密软…

当代家庭教育杂志当代家庭教育杂志社当代家庭教育编辑部2023年第19期目录

家庭教育资讯 我国拟立法完善学校爱国主义教育 4 教育部颁布《校外培训xxx行办法》 4 北京10家线上学科培训学校年检全部“通过” 5《当代家庭教育》投稿:cn7kantougao163.com 专家:家长要像关注躯体健康一样关心孩子心理健康 5 不要…

P9 链表 清空链表|销毁链表

目录 前言 01销毁链表 02 清空链表 测试代码 前言 🎬 个人主页:ChenPi 🐻推荐专栏1: 《C_ChenPi的博客-CSDN博客》✨✨✨ 🔥 推荐专栏2: 《Linux C应用编程(概念类)_ChenPi的博客-CSDN博客》✨✨✨ …

C语言二叉树的基本概念(一)

目录 二叉树 二叉树的分类(目前只谈两种) 满二叉树 完全二叉树 二叉树的性质(其余的可以自己总结) 选择练习 二叉树的存储结构 顺序存储方式 链式存储方式 二叉树 定义:二叉树是一种特殊的树状数据结构&…

pytorch 常用api笔记

view_as()函数 函数定义:view_as(tensor) [参数为一个Tensor张量] 该函数的作用是将调用函数的变量,转变为同参数tensor同样的形状。 例子 data1 [[[1, 2], [3, 4], [5, 6]], [[7, 8], [9, 0], [10, 11]]] t1 torch.Tensor(data1).long() # size2…

RTSP流媒体播放器

rtsp主要还是运用ffmpeg来搭建node后端转发到前端,前端再播放这样的思路。 这里讲的到是用两种方式,一种是ffmpeg设置成全局来实现,一种是ffmpeg放在本地目录用相对路径来引用的方式。 ffmpeg下载地址:http://www.ffmpeg.org/do…

Linux常用命令——atq命令

在线Linux命令查询工具 atq 列出当前用户的at任务列表 补充说明 atq命令显示系统中待执行的任务列表,也就是列出当前用户的at任务列表。 语法 atq(选项)选项 -V:显示版本号; -q:查询指定队列的任务。实例 at now 10 minu…

多路径传输(MPTCP MPQUIC)数据包调度研究总结

近些年来,以5G和Wifi6为代表的无线通信技术发展迅速,并已经在全世界实现了大规模部署。此外,智能手机等移动设备不断迭代更新,其网络通信能力也持续演进,使得应用同时利用多个不同网卡在多条不同物理链路上&#xff08…

【AIGCode】让AI生成随机数据

用户测试数据库性能,SQL性能等。 交互流程: 假如我的表结构是: CREATE TABLE prd_article_inf ( ARTICLE_INF_ID int(11) NOT NULL AUTO_INCREMENT, ARTICLE_AUTHOR varchar(24) DEFAULT NULL, ARTICLE_BRIEF varchar(255) DEFAULT NULL, …

面试题之分布式事务篇

1.什么是分布式事务? 概述:在分布式系统上一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务节点上,且属于不同的应用,分布式事务需要保证这些小操作要 么全部成功,要么全部失败。 如下所示&…

课题学习(十四)----三轴加速度计+三轴陀螺仪传感器-ICM20602

本篇博客对ICM20602芯片进行学习,目的是后续设计一个电路板,采集ICM20602的数据,通过这些数据对各种姿态解算的方法进行仿真学习。 一、 ICM20602介绍 1.1 初识芯片 3轴陀螺仪:可编程全刻度范围(FSR)为250 dps,500 d…

Apache shiro1.2.4反序列化漏洞(CVE-2016-4437)

1.搭建环境 2.准备好ysoserial反序列化工具和poc.py 3.输入账号和密码然后记得勾上remember me,然后抓包。 4.后来了解到,shiro是基于CommonsBeanutils的反序列化链 5.所以通过ysoserial,生成那个的gadget(小工具)&#xff…