gpt4 book ai didi

javascript - 循环内的递归函数

转载 作者:数据小太阳 更新时间:2023-10-29 06:01:13 31 4
gpt4 key购买 nike

我一直在研究递归函数,并开始或多或少地了解它们。当我遇到这个问题时,我正在参加一个免费的代码训练营挑战,但我不明白。 for 循环内的递归函数:

function steamroller(arr) {
var newArr = [];

for (var i = 0; i < arr.length; i++) {
//If (i)th element is an array
if (Array.isArray(arr[i])) {
newArr = newArr.concat(steamroller(arr[i]));
console.log(newArr);
} else {
newArr.push(arr[i]);
}
}
return newArr;
}
steamroller([1, [2],[3, [[4]]]]);
//returns [1, 2, 3, 4]

我很难理解的是:

newArr = newArr.concat(steamroller(arr[i]));

在那一行,newArr 连接到什么?该函数在 .concat 方法中再次被调用,对吗?但是那个 for 循环会发生什么? concat 方法内部的函数调用是否强制退出循环?

这是一个JSFiddle ,我将每个 newArr 都记录到控制台,但我什至无法遵循它。数组是这样构建的:

[1, 2]
[4]
[3, 4]
[1, 2, 3, 4] //Final

谢谢。

最佳答案

steamroller 函数需要遍历作为函数参数提供的数组中的索引,以确保看到数组的每个索引。

但是,原始数组有多个索引,而索引本身又可能包含多个索引,所有这些都需要依次循环。

concat 的调用仅在循环的当前索引上完成,这意味着结果是当前索引的“ Steam ”表示。

一步一步

  1. 原始数组传入函数:[1, [2],[3, [[4]]]]
  2. 循环从第一个索引开始:1,它不是数组,因此它被插入结果数组。
  3. 下一个循环迭代的索引是[2],它是一个数组,所以是递归的。
  4. 对函数的第一次递归调用接收 [2] 并对其进行迭代。
  5. 此递归调用的第一次迭代发现索引为 2,它不是数组,因此被插入结果数组。
  6. ...继续...

我们看到的是,当使用递归函数迭代嵌套数组时,无论嵌套如何,我们总是最终获得内部整数值。

关于javascript - 循环内的递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34097414/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com