Javascript 需要帮助理解递归的一个例子吗

Javascript 需要帮助理解递归的一个例子吗,javascript,algorithm,recursion,Javascript,Algorithm,Recursion,我试图理解一个用JavaScript编写的示例。实际上,我正在读《雄辩的JavaScript》,但在读一个关于递归的主题时,我被卡住了 下面是示例的说明: function findSolution(target) { function find(current, history) { if (current == target) { return history; } else if (current > target) { return nu

我试图理解一个用JavaScript编写的示例。实际上,我正在读《雄辩的JavaScript》,但在读一个关于递归的主题时,我被卡住了

下面是示例的说明:

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");
}
从数字1开始,反复添加5或 乘以3,就可以产生无穷多个数字。怎样 你会写一个函数,给定一个数字,试图找到一个 产生这样的结果的加法和乘法的序列 号码

下面是示例的代码:

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

递归函数调用自身,直到分支满足不调用自身的条件

在这种情况下,当当前值等于或高于初始目标值时,链停止

但我认为当电流等于目标时,它应该返回null

通过一些额外的日志记录,可以更好地跟踪所发生的事情

在下面的代码段中,当满足11的目标时,它将以null退出。
因为结果是空的,所以它乘以3得到最终的解

函数查找解决方案(目标){
功能查找(当前、步骤、操作){
log('step:'+step'\tacon:'+action'\tcurrent:'+current');
step++;
如果(当前==目标){
log(当前+'='+target+',因此以null'退出)
返回null;
}否则如果(当前>目标){
回流;
}否则{
返回find(当前+5,步骤,'+5')| | find(当前*3,步骤,'*3');
}
}
返回find(1,0,'start');
}

console.log(findSolution(11))