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

循環 vs 遞歸淺談_javascript技巧

May 16, 2016 pm 05:41 PM
循環 遞迴

例如遍歷以下一維數組:

複製程式碼 程式碼如下:

[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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

C++ 函式的遞歸實作:遞迴深度有限制嗎? C++ 函式的遞歸實作:遞迴深度有限制嗎? Apr 23, 2024 am 09:30 AM

C++函數的遞歸深度受到限制,超過此限制會導致堆疊溢位錯誤。限制值因係統和編譯器而異,通常在1000到10000之間。解決方法包括:1.尾遞歸最佳化;2.尾呼叫;3.迭代實作。

C++ lambda 表達式是否支援遞迴? C++ lambda 表達式是否支援遞迴? Apr 17, 2024 pm 09:06 PM

是的,C++Lambda表達式可以透過使用std::function支援遞歸:使用std::function捕捉Lambda表達式的參考。透過捕獲的引用,Lambda表達式可以遞歸呼叫自身。

C++ 函式的遞迴實作:遞迴與非遞迴演算法的比較分析? C++ 函式的遞迴實作:遞迴與非遞迴演算法的比較分析? Apr 22, 2024 pm 03:18 PM

遞歸演算法透過函數自呼叫解決結構化的問題,優點是簡潔易懂,缺點是效率較低且可能發生堆疊溢位;非遞歸演算法透過明確管理堆疊資料結構避免遞歸,優點是效率更高且避免堆疊溢出,缺點是程式碼可能更複雜。選擇遞歸或非遞歸取決於問題和實現的特定限制。

在Java中遞歸地計算子字串出現的次數 在Java中遞歸地計算子字串出現的次數 Sep 17, 2023 pm 07:49 PM

給定兩個字串str_1和str_2。目標是使用遞歸過程計算字串str1中子字串str2的出現次數。遞歸函數是在其定義中呼叫自身的函數。如果str1是"Iknowthatyouknowthatiknow",str2是"know"出現次數為-3讓我們透過範例來理解。例如輸入str1="TPisTPareTPamTP",str2="TP";輸出Countofoccurrencesofasubstringrecursi

C++ 函式遞歸詳解:遞迴在字串處理中的應用 C++ 函式遞歸詳解:遞迴在字串處理中的應用 Apr 30, 2024 am 10:30 AM

遞歸函數是一種在字串處理中反覆呼叫自身來解決問題的技術。它需要一個終止條件以防止無限遞歸。遞歸在字串反轉和回文檢查等操作中被廣泛使用。

初學者的 C++ 遞歸指南:打造基礎和培養直覺 初學者的 C++ 遞歸指南:打造基礎和培養直覺 May 01, 2024 pm 05:36 PM

遞歸是一種強大的技術,它允許函數呼叫自身來解決問題,在C++中,遞歸函數由兩個關鍵要素構成:基本情況(確定遞歸何時停止)和遞歸呼叫(將問題分解為更小子問題)。透過理解基礎知識並練習實戰範例(如階乘計算、斐波那契數列和二元樹遍歷),您可以建立遞歸直覺,並自信地在程式碼中使用它。

C++ 遞歸進階:瞭解尾遞歸最佳化及其應用 C++ 遞歸進階:瞭解尾遞歸最佳化及其應用 Apr 30, 2024 am 10:45 AM

尾遞歸最佳化(TRO)可提高特定遞歸呼叫的效率。它將尾遞歸呼叫轉換為跳轉指令,並將上下文狀態保存在暫存器中,而不是堆疊上,從而消除對堆疊的額外呼叫和返回操作,提高演算法效率。利用TRO,我們可以針對尾遞歸函數(例如階乘計算)進行最佳化,透過將tail遞歸呼叫替換為goto語句,編譯器會將goto跳轉移化為TRO,最佳化遞歸演算法的執行。

C++ 函式遞迴詳解:遞迴的替代方法 C++ 函式遞迴詳解:遞迴的替代方法 May 01, 2024 pm 04:54 PM

遞歸是一種函數呼叫自身的技術,但存在著堆疊溢位和效率低下的缺點。替代方法包括:尾遞歸最佳化,由編譯器最佳化遞歸呼叫為循環;迭代,使用循環而不是遞歸;協程,允許暫停和恢復執行,模擬遞歸行為。

See all articles