javascript - if 语句为真时会发生什么?
问题描述
我从 HackerRank 开始,我是一个该死的初学者。
所以我对这段代码有疑问:
'use strict';
process.stdin.resume();
process.stdin.setEncoding('utf-8');
let inputString = '';
let currentLine = 0;
process.stdin.on('data', inputStdin => {
inputString += inputStdin;
});
process.stdin.on('end', _ => {
inputString = inputString.trim().split('\n').map(string => {
return string.trim();
});
main();
});
function readLine() {
return inputString[currentLine++];
}
/*
* Create the function factorial here
*/
function factorial(n) {
if (n === 1) {
return 1
} else {
return n * factorial(n - 1)
}
return n;
}
function main() {
const n = +(readLine());
console.log(factorial(n));
}
我把它分解成这样的:
让我们依靠 n = 4;
4 === 1 ? // NO!
THEN:
4 * factorial(4-1) // n = 3;
3 === 1? // NO!
THEN:
3 * factorial(3-1) // n = 2;
2 === 1? // NO!
THEN:
2 * factorial(2-1) // n = 1;
1 === 1? // YES!
return 1;
现在会发生什么?return 1 发生了什么,所有其他“循环”发生了什么?!为什么它会一遍又一遍地循环,即使没有循环?
请尝试尽可能简单地解释。
解决方案
这是您的代码的样子(从上面稍作修改)
4 === 1 ? // NO!
THEN:
4 * factorial(2) // n = 3;
3 === 1? // NO!
THEN:
3 * factorial(2) // n = 2;
2 === 1? // NO!
THEN:
2 * factorial(1) // n = 1;
1 === 1? // YES!
return 1;
当return 1
被执行时,1
返回给函数的调用者factorial(1)
。
现在这个函数2 * factorial(1)
正在等待 的值factorial(1)
,所以它可以执行2 * factorial(1)
。现在它可以2 * 1
为您提供2
. 该值返回给factorial(2)
函数的调用者。
同样的过程3 * factorial(2) // n = 2;
正在等待factorial(2)
。Javascript 在之前的迭代中解决了这个问题,现在它能够执行3 * 2
= 6。这6
将返回给factorial(3)
.
最后4 * factorial(3)
确实4 * 6
= 24
你的答案是24
更好地解释这一切在幕后是如何运作的
https://codeburst.io/learn-and-understand-recursion-in-javascript-b588218e87ea
推荐阅读
- typescript - Vue - vuetify - 对象字面量只能指定已知属性,而 'vuetify' 不存在于类型 'ComponentOptions
- c++ - 关于如何读取、编写和打印 QJson 代码的最小示例(使用 QJsonDocument、QJsonArray、QJsonObject、QFile)
- python - 在 Python 中导入时如何处理错误
- javascript - 结合多个休息调用以在 apollo-server 中填充 1 个 graphQL 类型的最佳实践
- nginx - | NGINX | FFMPEG 不在指定目录中创建 DASH 清单或块 |
- joomla - joomla 管理员编辑自己的用户组
- php - htaccess 重定向个人资料页面
- arduino - LCD Arduino 无法正确显示
- python - I am trying to plot a geojson circle with a point in it... But it does not merge in the geometries part in it
- excel - 与不同文件夹和不同单元格的工作簿进行比较