了解递归函数与 Javascript 中的逻辑运算符相结合
Understanding recursive functions combined with logical operators in Javascript
在 Eloquent Javascript 中,以下示例作为递归函数给出:
function findSolution(target) {
function find(start, history) {
if (start == target)
return history;
else if (start > target)
return null;
else
return find(start + 5, "(" + history + " + 5)") ||
find(start * 3, "(" + history + " * 3)");
}
return find(1, "1");
}
console.log(findSolution(24));
之后给出了一个很好的解释,但我很难理解为什么
return find(start + 5, "(" + history + " + 5)") ||
find(start * 3, "(" + history + " * 3)");
位工作。在我看来,为什么你可以有一个没有布尔值的||
?find()
怎么知道"返回"和函数的这一部分,并在start * 3
到达start > target
的分支时"重试",从而获得null
?
我有一位导师引导我解决这个问题。
调用findSolution(target)
时,它会调用find(1,"1")
。||
工作的原因是因为,如果目标是示例24
,因为(正如elclans指出的那样)||
短路,直到start = 26
才会执行find(start + 5...)
调用。在此迭代中,start > target
,因此它将return null
。上一个调用,其中 start = 21
,将收到一个 NULL,||
将其视为 false
,这会导致它find(start * 3...)
,这也将导致NULL
返回,这将返回到其中的迭代,其中 start = 16
,依此类推。
相关文章:
- Javascript逻辑运算符和字符串/数字
- 将图像上传ajax与表单提交ajax相结合
- Javascript,如果条件在没有&&逻辑运算符当&&它不起作用
- 用于验证JS中逻辑运算符表达式的正则表达式
- 将语句与jquery相结合,并使用媒体查询来实现返回页首按钮
- 媒体查询与Javascript相结合
- 为什么在javascript函数声明中使用逻辑运算符
- 为什么这个while循环不能使用AND逻辑运算符
- 为什么可以'我将谷歌地图getCurrentPosition与地点搜索API相结合
- 逻辑运算符混淆
- 如何在不使用css转换的情况下将jQuery animate与css3属性相结合
- IF ELSEIF语句中的Java脚本逻辑运算符
- 将jQuery选择器与“this”相结合
- 将键盘使用与 Qualtrics 中的答案随机化相结合
- iframe与Javascript相结合的zipcode检查器
- 为什么JavaScript中的逻辑运算符是关联的
- 布尔表达式-与AND、OR逻辑运算符混淆以及它们的工作方式
- 将n个对象与javascript相结合
- 将JSON数组与jQuery相结合
- 了解递归函数与 Javascript 中的逻辑运算符相结合