我正在练习递归。从概念上讲,我知道它应该如何工作(请参阅下文),但是我的代码不起作用。

请告诉我我在做什么错。并请说明您的代码的每个步骤及其工作方式。清晰的解释比仅给我有效的代码好十倍。

  /*
  buildList(0, 5) ==  buildList(0, 5 - 1) // [0]
  buildList(0, 4) ==  buildList(0, 4 - 1) // [0,0]
  buildList(0, 3) ==  buildList(0, 3 - 1) // [0,0,0]
  buildList(0, 2) ==  buildList(0, 2 - 1) // [0,0,0,0]
  buildList(0, 1) ==  buildList(0, 1 - 1) // [0,0,0,0,0]
  */

var buildList = function(value, length) {
    var result = [];
   if (length === 0) {
    return result;
   }

   result.push(value);

   return  buildList(result.push(value), length - 1);

};


buildList(0, 5);


我了解递归在概念上是如何工作的。

最佳答案

您的方法行不通,因为基本情况返回了一个新的空数组,而其他情况则返回了递归的结果。

相反,您应该先递归然后推送

var buildList = function(value, length) {
  if (length <= 0) return [];
  var recur = buildList(value, length-1);
  recur.push(value);
  return recur;
};


另外,在基本情况下,您可以避免创建新数组

var buildList = function(value, length, array=[]) {
  if (length <= 0) return array;
  array.push(value);
  return buildList(value, length-1, array);
};

10-06 09:11