此函数将数字作为输入并返回带和的字符串。实际上它的工作原理
findSolution(21);
// returns:
((((1 + 5) + 5) + 5) + 5)
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(21));

答案 0 :(得分:1)
它是一个(简单的)递归模式。
内部功能:
null
(n + 5)
或(n * 3)
调用自己,并在前一阶段累积输出。前两个选项是终止递归的选项。
||
运算符是第三种情况的重要部分。它首先尝试n + 5
解决方案,但只有当递归调用返回null
时,懒惰的||
运算符才会评估n * 3
调用。
但是请注意,如果两个调用都失败,因为n * 3
和n + 5
都超过了目标值(对于大量数字,它们会这样做),那么整个函数将返回null
。