我是JavaScript新手并阅读book,在递归章节中,有一个示例如下
function findSolution(target) {
function find(current, history) {
if (current == target)
return history;
else if (current > target)
return null;
else
return find(current + 5, "(" + history + " + 5)") ||
find(current * 3, "(" + history + " * 3)");
}
*return find(1, "1"); // when will this run?
}
console.log(findSolution(24));
// → (((1 * 3) + 5) * 3)
我无法理解JavaScript如何运行这些原因,因为它预计在所有三个current
案例中都会if
为{?}}但是作者只是在函数外部运行,它以target
为参数,而不是current
。它是否取得了当前和历史的价值
return find(1,"1")
喜欢吊装?
答案 0 :(得分:1)
current
和history
是fund
函数的参数名称,而不是findSolution
函数。
所以是的,它会在find(1, "1")
用于调用该函数时获取这些值(稍后,当调用find(current * 5, …)
和find(current + 3, …)
时)。
这与吊装没有任何关系或相关。
答案 1 :(得分:0)
find
只是findSolution
内的嵌套函数。find
需要return find(1, "1")
给出的2个参数。
每次拨打findSolution
时都会生成该语句,因为find
刚刚定义,您显然必须调用它。
请注意,target
是findSolution
的参数,但也可以在该方法的嵌套函数中使用。