我试图用递归函数中的值范围填充一个数组,但是我看到在返回数组时发生了一个奇怪的事情,尽管数组有值,当我在函数外警告它时它给我未定义。不确定它是我的代码问题还是任何行为。
相同的实现,当我厌倦了使用简单的for循环它工作正常。
我不知道这个问题的标题,请建议我一个好的。
使用递归
var arr = [];
function fillArray(n,i){
if(arr.length !== n){
if(i===0)
arr[i] = i;
else
arr[i] = arr[i-1] + 1;
fillArray(n,++i);
}
else{
console.log(arr);
return arr;
}
}
console.log(fillArray(10,0));
使用For循环
var arr = [];
function fillArray(start,end){
for(var i=start,j=0;i<=end;i++,j++){
arr[j] = i;
}
return arr;
}
alert(fillArray(1,10));
答案 0 :(得分:2)
function fillArray(n, i, a) {
a.push(i);
return a.length < n ? fillArray(n, ++i, a) : a;
}
console.log(fillArray(10, 0, []));
答案 1 :(得分:0)
首先,这不是一个应该在JavaScript中递归实现的好例子。这是单一的。
结果在函数外部undefined
的原因是您的代码无法返回每个连续递归调用的结果。递归语句应如下所示:
return fillArray(n,++i);
如果没有这个, 返回数组的最终调用将使倒数第二次调用忽略其返回值。
答案 2 :(得分:0)
看看你的例子:
var arr = [];
function fillArray(n,i){
if(arr.length !== n){
if(i===0)
arr[i] = i;
else
arr[i] = arr[i-1] + 1;
fillArray(n,++i); // ends without returning anything
}
else{
console.log(arr);
return arr; // return array
}
}
console.log(fillArray(10,0));
首先,我不会在函数外部声明值,并且我不会对递归进行声明(因为你污染了你的闭包。但是如果你这样做并保持你的函数原样,不要期望值作为返回在这里(当你在它之外编辑变量时)。
var arr = [];
function fillArray(n,i){
if(arr.length !== n){
if(i===0)
arr[i] = i;
else
arr[i] = arr[i-1] + 1;
fillArray(n,++i);
} // return not needed
}
fillArray(10,0);
console.log(arr);