我试图通过递归地执行范围函数来教自己递归。我无法理解为什么下面的代码不起作用?
迭代版本:
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]
答案 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]
}