Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么这个函数示例从雄辩的JavaScript返回值24?

为什么这个函数示例从雄辩的JavaScript返回值24?
EN

Stack Overflow用户
提问于 2014-12-21 15:50:09
回答 2查看 467关注 0票数 1

我是JavaScript的新手,我正试图从这本书中了解一个例子。当我进入这个例子时,我期望fac (4 )的值为12,这将是(4-1)* 4的结果。

然而,当我在intro.html上运行在线图书(页面底部)的代码时,我得到了24的值。我在这里错过了什么?

代码语言:javascript
运行
AI代码解释
复制
function fac(n) {
  if (n == 0)
    return 1;
  else
    return fac(n - 1) * n;
}
console.log(fac(4));

我试图通过Twitter和在线研究找到答案,但没有成功。我知道我忽略了一些东西,但似乎看不见。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-21 15:51:59

因为它是递归的。

代码语言:javascript
运行
AI代码解释
复制
function fac(n) {
  if (n == 0)
    return 1;
  else
    return fac(n - 1) * n;
}
console.log(fac(4));

所以让我们追踪它

代码语言:javascript
运行
AI代码解释
复制
fac(3) * 4;
fac(2) * 3 * 4;
fac(1) * 2 * 3 * 4;
fac(0) * 1 * 2 * 3 * 4;
1 * 1 * 2 * 3 * 4;

当然,也就是24。

票数 4
EN

Stack Overflow用户

发布于 2014-12-21 16:17:18

如果您注意到您的代码,在第5行,此函数正在调用自己,这称为递归,请在维基百科上阅读更多有关它的信息。

让我们回到您的代码,并运行它看看它是如何工作的。让我们给每一行一个数字,这样我们就可以引用它。

代码语言:javascript
运行
AI代码解释
复制
1.function fac(n) {
2.  if (n == 0)
3.    return 1;
4.  else
5.    return fac(n - 1) * n;
6.}
7.console.log(fac(4));

对于第一次调用,输入值为4,让我们称其为call A

对于值4,第1行的if条件将返回false,因此它将转到第5行,该行再次调用

代码语言:javascript
运行
AI代码解释
复制
fac(3) * 4;

现在您的函数call A在这里暂停,并生成一个值为3的call Bcall A的结果还有待评估。

现在,对于值3,第2行中的if条件将再次返回false,第5行的代码将执行如上;即

代码语言:javascript
运行
AI代码解释
复制
fac(2) * 3;

call B在这里暂停,将出现输入相同函数的输入2的call C

call C上,您的代码将在第2行针对if条件返回false,因此它将使用输入1生成call D

代码语言:javascript
运行
AI代码解释
复制
fac(1) * 2

对于call D,第2行中的if条件将返回true,您的函数将返回1,因此call D的值为1。现在从下到上替换每个fac(n),并继续计算每个调用。

代码语言:javascript
运行
AI代码解释
复制
result of call D => 1  
result of call C => fac(1) * 2 => 1 * 2 => 2  
result of call B => fac(2) * 3 => 2 * 3 => 6  
result of call A => fac(3) * 4 => 6 * 4 => 24

我希望您能够理解它是如何工作的,递归中的重要点是在第2行代码中的停止条件。

上面的结果也可以通过使用循环产生,但使用递归更有趣。

快乐编码:)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27595015

复制
相关文章
摄像机标定和立体标定
尝试用OpenCV来实现立体视觉也有一段时间了,主要的参考资料就是Learning OpenCV十一、十二章和OpenCV论坛上一些前辈的讨论。过程中磕磕碰碰,走了不少弯路,终于在前不久解决了最头大的问题,把整个标定、校准、匹配的流程调试成功。(虽然还有一些问题至今尚未搞清) 在这里写这篇文章,第一方面是给自己一个总结,第二方面是感觉OpenCV立体视觉方面的资料还是相当零散和不完整,新手入门需要花很长时间才能摸索出来,第三方面,也是自己在过程中有些问题仍旧迷迷糊糊,希望可以抛砖引玉。 1. 摄像头 我用的
智能算法
2018/04/02
2.1K0
摄像机标定和立体标定
FPGA VR摄像机-拍摄和拼接立体 360 度视频
本文主要介绍第二版本,第二版本的 VR 摄像机,能够以 30fps 的速度拍摄 4k(3840 x 1920)立体 360 度视频,同时在摄像机上实时拼接和编码。除了最终的 H.264 编码将在 Nvidia Jetson TX2 上执行之外,所有图像处理功能都将在 FPGA 上执行。
碎碎思
2023/08/30
4070
FPGA VR摄像机-拍摄和拼接立体 360 度视频
Mysql安全基线
Mysql安全基线 NO.1 增强root帐户密码登陆、删除空密码 原因 一、简单密码容易暴力破解二、mysql默认是空密码 解决 一、增强密码强度- 22位以上- 同时包含大写字母、小写字母、数字、特殊字符- 密码不重复使用- 密码定期更换(60天、90天)二、给空密码帐号加上密码mysqladmin -u root password “newpassword”mysql> use mysql;mysql> update user set password=password(‘newpassword’)
零式的天空
2022/03/16
1K0
一篇文章认识《双目立体视觉》
双目立体视觉,由两个摄像头组成,像人的眼睛能看到三维的物体,获取物体长度、宽度信息,和深度的信息;单目视觉获取二维的物体信息,即长度、宽度。
一颗小树x
2021/05/15
10.3K1
一篇文章认识《双目立体视觉》
基线估计
以深度学习为代表的现代机器学习方法在预测和分类准确性上取得了巨大的成功。在机器学习中,典型的学习过程首先将可用的训练数据拆分为训练、验证和测试集,我们在训练集上训练模型,在验证集上验证超参数,在测试集上验证模型的性能。但是在实际应用中,性能良好的测试集模型将如何发挥作用?如果模型A在测试集上的性能优于模型B,这是否意味着在实际应用中A模型的效果更好?实际上有许多因素会影响模型的实际落地效果,如测试集的分布与模型训练数据存在分布差异,模型在预测或分类时是不可靠的,且这种误差不可评估。
慎笃
2021/09/15
9370
MIT黑科技:无需视觉输入,立体声音频+摄像机元数据即可实现移动车辆定位
作者:Chuang Gan、Hang Zhao、Peihao Chen、David Cox、Antonio Torralba
机器之心
2019/11/11
7800
MIT黑科技:无需视觉输入,立体声音频+摄像机元数据即可实现移动车辆定位
双目视觉简介
双目立体视觉,在百度百科里的解释是这样解释的:双目立体视觉(Binocular Stereo Vision)是机器视觉的一种重要形式,它是基于视差原理并利用成像设备从不同的位置获取被测物体的两幅图像,通过计算图像对应点间的位置偏差,来获取物体三维几何信息的方法。
点云PCL博主
2019/07/30
1.9K0
双目视觉简介
安全基线[Nginx]
Nginx安全基线 NO.1 禁止某些文件类型的访问 原因 某些文件不小心传如web目录后存在很大风险 解决 location *.(txt doc docx rar zip)$ root /var/www/www.xxx.xxx; Deny all; } NO.2 禁止访问某目录 原因 一些敏感目录禁止直接访问 解决 location ^/(web-inf)/{ Deny all; } NO.3 禁止某个IP或网段访问 原因 限制某些恶意用户的IP或网段 解决 location /{ Deny xxx
零式的天空
2022/03/21
6240
对极几何概论
数字图像是真实世界中的对象通过光学成像设备在光敏材料上的投影。在3D到2D的转换过程中,深度信息会丢失。从单个或多个图像中恢复有用的3D信息需要使用立体视觉知识进行分析。本文分别介绍了针孔摄像机模型和对极几何的基本知识。
小白学视觉
2020/09/04
5770
【基线加固】Centos7等保二级基线加固(主机安全基线)
编辑/usr/lib/systemd/system/rescue.service 及/usr/lib/systemd/system/emergency.service 设置ExecStart
腾讯云-MSS服务
2020/11/11
3.2K0
Linux基线加固
主机安全的风险级别除了漏洞,另一个重要的参考值是安全基线的风险分值,本次介绍的主要是结合目前公司的业务实际情况制作的一份安全基线脚本,供大家进行参考。
信安之路
2018/08/08
3.2K0
Linux基线加固
自动驾驶汽车的伪激光雷达-双目立体视觉
双目立体视觉(Binocular Stereo Vision)是机器视觉的一种重要形式,它是基于视差原理并利用成像设备从不同的位置获取被测物体的两幅图像,通过计算图像对应点间的位置偏差,来获取物体三维几何信息的方法。
点云PCL博主
2022/02/10
1.4K0
自动驾驶汽车的伪激光雷达-双目立体视觉
CVPR 2022 | StyleSDF: 高分辨率三维一致图像和几何生成
StyleGAN 架构展示了高质量 RGB 图像生成,但是它们仅针对生成单个 RGB 视图,而不是 3D 内容。本文提出的 StyleSDF 是一种生成 3D 一致的高分辨率(1024 × 1024) RGB 图像和几何图形的方法。相关的 3D 生成模型通过基于坐标的多层感知器(MLP)实现形状和外观的合成,然而这些工作往往需要 3D 或多视图数据进行监督,这些数据很难收集,并且由于它们依赖于昂贵的体积场采样,现有算法大多仅限于低分辨率的渲染输出。
用户1324186
2023/02/03
1.4K0
Ubuntu安全基线检查
描述 设置密码失效时间,强制定期修改密码,减少密码被泄漏和猜测风险,使用非密码登录方式(如密钥对)请忽略此项。 加固建议 使用非密码登录方式如密钥对,请忽略此项。在 /etc/login.defs中将 PASS_MAX_DAYS 参数设置为 60-180之间,如:
咻一咻
2020/05/29
2.2K0
论文简述 | 无需校正和不失真的实时变化的鱼眼双目
广角摄像头拍摄的稠密3D地图有利于导航和自动驾驶等机器人应用.在这项工作中,我们提出了一种实时稠密三维鱼眼相机建图方法,无需显式校正和不失真.我们扩展了传统的变分立体方法,通过使用由摄像机运动引起的轨迹场来约束沿外极曲线的对应搜索.与传统的校正方法相比,我们还提出了一种在不增加处理时间的情况下生成轨迹场的快速方法.通过我们的实现,我们能够使用现代图形处理器实现实时处理.我们的结果显示了我们的非校正稠密建图方法相对于校正变分方法和非校正离散立体匹配方法的优势.
3D视觉工坊
2020/11/19
1.1K0
论文简述 | 无需校正和不失真的实时变化的鱼眼双目
立体的表达方式
今天初六了,从回成都到今天已经五天了。在家忙着,时间过得太快了,完全感受不到在家赋闲。本来明天应该正式开始上班了,还好假期延长了,还有两天时间可以争取多做点有意义的事,弥补前面十几天无所作为的愧疚感。
efonfighting
2020/02/21
8080
立体的表达方式
双目视觉测距系统软硬件设计
随着计算机技术和光电技术的发展,机器视觉技术应运而生。在图像处理技术领域中,有一种采用 CCD摄像机作为图像传感器采集数据的非接触式测量方法,这种方法具有精度高、速度快、成本低等诸多优点,在三维测量方面具有广泛的应用前景。双目测距技术运用两个摄像头对同一场景进行拍摄,从而产生图像视差,然后通过该视差建立物体距离测量模型,从而实现景物距离的实时计算。
苏州程序大白
2021/08/13
1.7K0
双目视觉测距系统软硬件设计
linux主机安全基线检查脚本怎么做?安全基线的检查内容
对于电脑系统来说安全是第一大问题,所以每一个电脑系统或者主机系统都会配置许多的防护软件以及安全软件。定期的来检查电脑的安全系统,以及一些其他的系统安全问题,可以有效的预防电脑漏洞的出现以及安全隐患的出现。现在来了解一下linux主机安全基线检查脚本怎么做?
用户8715145
2021/12/29
2.5K0
安全基线检查平台
最近在做安全基线检查相关的,网上有一些代码比较零散;也有一些比较完整的项目,比如owasp中的安全基线检查项目,但是收费;还有一些开源且完整的,比如lynis,但是不符合我的要求。
FB客服
2020/02/20
3.8K0
安全基线检查平台
立体视觉+惯导+激光雷达SLAM系统
标题:Stereo Visual Inertial LiDAR Simultaneous Localization and Mapping
点云PCL博主
2021/01/05
8960

相似问题

Postgres容器没有启动

12

似乎无法在Docker容器中启动MySQL

19

创建但未启动的Chaincode容器

15

模板化函数似乎创建了临时容器

12

启动bluemix容器时没有日志记录

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档