递归范围函数不起作用

时间:2015-09-24 05:31:11

标签: javascript recursion

我试图通过递归地执行范围函数来教自己递归。我无法理解为什么下面的代码不起作用?

迭代版本:

function rangeList(num, num2) {
  var arr = [];
  for (var i = num; i < num2; i++) {
    arr.push(i);
  }
  return arr;
}

递归版:

function rangeRecursive(num, num2) {
  return (num2 > num) ? rangeRecursive(num2 - 1).concat(num2) : []
}

console.log(rangeList(1, 7)); // returns [1, 2, 3, 4, 5, 6]
console.log(rangeRecursive(1, 7)); // returns [7]

2 个答案:

答案 0 :(得分:5)

它不起作用,因为你在递归调用中缺少一个参数

应该是这样的

function rangeRecursive(num, num2) {
  return (num2 >= num) ? rangeRecursive(num /*this was missing*/, num2 - 1).concat(num2) : []
}

还要注意三元组的更改条件,否则它会停在1并且不会连接它。您可以使用>=或以下

return num2 > num ? rangeRecursive(num, num2 - 1).concat(num2) : [num]

答案 1 :(得分:1)

您在递归函数中缺少参数。它应该是这样的:

function rangeRecursive(num, num2) 
{
  return num2 > num ? rangeRecursive(num, num2 - 1).concat(num2) : [num]
}