如何在添加Javascript后给出一个数字并返回一个字符串

时间:2016-06-12 06:14:05

标签: javascript recursion

此函数将数字作为输入并返回带和的字符串。实际上它的工作原理

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));




1 个答案:

答案 0 :(得分:1)

它是一个(简单的)递归模式。

内部功能:

  • 发现已找到目标并将其返回
  • 或者在返回null
  • 时发现已超出目标
  • 否则会尝试使用(n + 5)(n * 3)调用自己,并在前一阶段累积输出。

前两个选项是终止递归的选项。

||运算符是第三种情况的重要部分。它首先尝试n + 5解决方案,但只有当递归调用返回null时,懒惰的||运算符才会评估n * 3调用。

但是请注意,如果两个调用都失败,因为n * 3n + 5都超过了目标值(对于大量数字,它们会这样做),那么整个函数将返回null