在 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)");
有点有效。为什么你可以有||
无论如何,在我看来,没有对 bool 值进行处理? find()
怎么样知道“回来”和这部分功能,并使用start * 3
“再试一次”当它到达 start > target
的分支时因此得到 null
?
最佳答案
我有一位导师指导我解决了这个问题。
当调用 findSolution(target)
时,它会调用 find(1,"1")
。 ||
起作用的原因是,如果目标是示例 24
,因为(正如 elclanrs 指出的) ||
是短路的,仅find(start + 5...)
调用将一直执行到 start = 26
。在本次迭代中,start > target
,因此它将返回 null
。之前的调用(其中 start = 21
)将收到 NULL,||
将其视为 false
,这会导致它 find(start * 3...)
,这也会导致 NULL
返回,这将返回到 start = 16
的迭代,等等。
关于javascript - 理解Javascript中的递归函数与逻辑运算符相结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34816076/