从雄辩的Javascript返回null
因此,我从Elount JS获得了以下代码:从雄辩的Javascript返回null,javascript,recursion,Javascript,Recursion,因此,我从Elount JS获得了以下代码: function findSolution(target) { function find(start, history) { if (start == target) return history; else if (start > target) return null; else return find(start +
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));
我的问题是null在这个递归中做了什么?当我们达到以下程度时:
find(26, history) // start = 26, history = (1+5)+5)+5)+5)+5)
它点击返回null的start>tagert
语句
那么接下来会发生什么呢 操作符是返回第一次或第二次调用结果的快捷方式。如果对
find
的第一次调用返回null,则返回第二次调用的结果
在这种情况下,Null表示到达目标的方法不成功。函数
findSolution
基本上尝试+5
和*3
的所有组合以达到目标。操作符是返回第一次或第二次调用结果的快捷方式。如果对find
的第一次调用返回null,则返回第二次调用的结果
在这种情况下,Null表示到达目标的方法不成功。函数findSolution
基本上是尝试+5
和*3
的所有组合来达到目标。问题是带有空值的“或”(| |)
function findSolution(target) {
function find(start, history) {
if (start == target)
return history;
else if (start > target)
return null;
else
{
var result = find(start + 5, "(" + history + " + 5)");
if(result != null)
return result;
else
return find(start * 3, "(" + history + " * 3)");
}
}
return find(1, "1");
}
console.log(findSolution(24));
其他解决方案:
function findSolution(target) {
function find(start, history) {
if (start == target)
return history;
else if (start > target)
return false;
else
return find(start + 5, "(" + history + " + 5)") ||
find(start * 3, "(" + history + " * 3)");
}
return find(1, "1");
}
结果是:
(((1 * 3) + 5) * 3)
问题是“or”(| |)的值为空
function findSolution(target) {
function find(start, history) {
if (start == target)
return history;
else if (start > target)
return null;
else
{
var result = find(start + 5, "(" + history + " + 5)");
if(result != null)
return result;
else
return find(start * 3, "(" + history + " * 3)");
}
}
return find(1, "1");
}
console.log(findSolution(24));
其他解决方案:
function findSolution(target) {
function find(start, history) {
if (start == target)
return history;
else if (start > target)
return false;
else
return find(start + 5, "(" + history + " + 5)") ||
find(start * 3, "(" + history + " * 3)");
}
return find(1, "1");
}
结果是:
(((1 * 3) + 5) * 3)
我来试试:
find函数无论如何只能返回2个值:字符串历史记录或null。一旦达到任何停止条件:start==target
或start>target
,这将是整个递归调用的结果
现在,对于每个递归调用,代码可能最多再创建两个递归调用。如果对find(start+5,“(“+history+”+5)”)
的调用返回null(记住它只能返回null或history),那么find(start*3,“(“+history+”*3)”)
将作为另一次返回历史的尝试执行,如果第二次调用也返回null,那么null将是您的最终结果。我将尝试一下:
find函数无论如何只能返回2个值:字符串历史记录或null。一旦达到任何停止条件:start==target
或start>target
,这将是整个递归调用的结果
现在,对于每个递归调用,代码可能最多再创建两个递归调用。如果对
find(start+5,“(“+history+”+5)”)
的调用返回null(记住它只能返回null或history),那么find(start*3,“(“+history+”*3)”)
将作为另一次返回历史的尝试执行,如果第二次调用也返回null,那么null将是您的最终结果。调用方得到一个null
。如果它是递归调用,它将被插入|
(逻辑or),或者如果它是findSolution
中的第一个,那么整个结果将是null
。调用者将得到null
。如果它是递归调用,它将被插入|
(逻辑or),或者如果它是findSolution
中的第一个调用,那么整个结果将是null
。我很感激这里的每个答案,但这个答案对我来说非常清楚。谢谢。我很感激这里的每一个答案,但这一个对我来说非常清楚。谢谢