我试图理解递归,并且我对它的直观工作方式有一些体面的理解,但是返回的数据的聚合是我努力的一点。正确理解递归的方法(javascript)
例如,在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似乎是某种廉价的黑客。我不知道如何去思考当到达堆栈顶部时返回的结果以及将函数传回堆栈的结果。你将如何实现这个功能,以及如何更好地掌握这个功能?
谢谢!
检查'java'标记,'java'不是'javascript' – SomeJavaGuy
对于这样的复杂递归,我会简化问题(使其更小),而不是使用'[1,2,3,4, 5,6,[1,2,3,4,5,[1,2,3],[1,2,3,4]]''你可以简化它,像'[1,2,[1,2 ,3]]'从那里尝试了解这里的递归如何工作。 – direprobs
'g'不是全局的,在JavaScript中使用闭包是一个非常好的方法。 –