Javascript中的递归函数来填充数组

Recursive function in Javascript to fill Array?

本文关键字:填充 数组 递归函数 Javascript      更新时间:2023-09-26

我试图用递归函数中的值范围填充数组,但我看到在返回数组时发生了一件奇怪的事情,尽管数组有值,当我在函数之外提醒它时,它给了我未定义。不确定是我的代码问题还是任何类型的行为。

当我厌倦了使用简单的 for 循环时,同样的实现它工作正常。

我不知道这个问题该给什么标题,请给我一个好的。

JS小提琴

使用递归

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

function fillArray(n, i, a) {
  a.push(i);
  return a.length < n ? fillArray(n, ++i, a) : a;
}
console.log(fillArray(10, 0, []));

首先,这不是一个应该在 JavaScript 中递归实现的好例子。这是不合时宜的。

结果undefined函数外部的原因是代码无法返回每个连续递归调用的结果。递归语句应如下所示:

    return fillArray(n,++i);

否则,返回数组的最后一个调用将被倒数第二个调用忽略其返回值。

看看你的例子:

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