gpt4 book ai didi

javascript - 正确理解递归的方法(javascript)

转载 作者:行者123 更新时间:2023-11-30 09:45:27 24 4
gpt4 key购买 nike

我正在尝试理解递归,并且我对它的直观工作方式有一定的了解,但是返回数据的聚合是我遇到的问题。

例如,在 javascript 中展平数组时,我想出了以下代码:

var _flatten = function(arr){
if(!arr instanceof Array) return arr;
var g = [];

function flatten(arr){

for(var i = 0; i < arr.length;i++){
if(arr[i] instanceof Array){
flatten(arr[i]);
}else{
g.push(arr[i]);
}
}
}

flatten(arr);
return g;
}

像这样转动

var list = [1,2,3,4,5,6,[1,2,3,4,5,[1,2,3],[1,2,3,4]]];

进入这个:[ 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 1, 2, 3, 1, 2, 3, 4 ]

这很好,但是全局变量 g 似乎是某种廉价的 hack。我不知道如何考虑到达堆栈顶部时返回的结果以及函数返回堆栈的返回。你将如何实现这个功能,我怎样才能更好地掌握这个功能?

谢谢!

最佳答案

您可以将 g 作为参数发送给 flatten 函数,而不是全局变量(以使其更适合递归),然后使用 return 语句将修改后的 g 传回。

var _flatten = function(arr) {
if (!arr instanceof Array) return arr;

function flatten(arr, g) {
for (var i = 0; i < arr.length; i++) {
if (arr[i] instanceof Array) {
flatten(arr[i], g);
} else {
g.push(arr[i]);
}
}
return g;
}

return flatten(arr, []);
}

关于javascript - 正确理解递归的方法(javascript),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39076605/

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