首頁 >web前端 >js教程 >循環 vs 遞歸淺談_javascript技巧

循環 vs 遞歸淺談_javascript技巧

WBOY
WBOY原創
2016-05-16 17:41:141106瀏覽

例如遍歷以下一維數組:

複製程式碼 程式碼如下:

[javascript] view plaincopyprintvar a2 = [1, 2]; 
var a3 = [1, 2, 3]; 

雖然它們長度不一,但循環應付它們非常容易,也很優雅:

複製程式碼 程式碼如下:
[javascript] view plaincoppyprint    for (var i = 0; i         println(a[i]); 
     println 


如果改用遞歸,看起來比較彆扭:

複製程式碼

程式碼如下:[javascript] view plaincopyprint? function(i, a) {      if (i         println(a[i]);       println(a[i]);       println(a[i]);   🎜>};




它們能輸出相同的結果,但相較之下遞歸版本看起來很笨拙。

現在想想,如果元資料變化了:維度擴大到二維。

複製程式碼

程式碼如下:

[javascript] view plaincopyprint 此時需要再外面再套一層循環變成雙重循環:


複製程式碼

程式碼如下:

[javascript] view plaincoppyprint    for (var i = 0; i         for (var j = 0; j         }      }  }; 
如果資料的維度繼續擴大…甚至連維N維數組。使用循環該怎麼處理呢?

在這種「層數」很深,甚至不確定的情況下,就需要用「遞歸」來解決跨「層」的問題。





複製程式碼

程式碼如下:

[javascript] view plaincopyprint    return Object.prototype.toString.call(a) === '[object Array]'; 

}; 

    if (isArray(a)) {          for (var i = 0; i      }      } else {          println(a);      } 
}; 




上面的程式碼中,如果發現子節點是一個數組,就使用遞歸進入下一層;而同一層上的遍歷則使用循環來完成。
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn