我試圖理解遞歸,並且我對它的直觀工作方式有一些體面的理解,但是返回的數據的聚合是我努力的一點。正確理解遞歸的方法(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中使用閉包是一個非常好的方法。 –