什麼是遞迴?
遞歸一詞來自recurring,意思是一次又一次地回到過去。遞歸函數是透過一步步改變輸入來一次又一次地呼叫自身的函數。這裡,將輸入改變一級意味著將輸入減少或增加一級。
每當遞歸函數達到基本條件時,它就會停止自身的執行。讓我們透過一個例子來理解什麼是基本條件。例如,我們需要求一個數的階乘。我們透過將輸入減 1 來呼叫階乘函數,並且每當輸入達到 1 時就需要停止。因此,這裡 1 作為基本條件。
文法
使用者可以使用下面的語法來理解 JavaScript 中的遞歸。
function recur(val) { if (base condition) { return; } // perform some action // decrease the value of val by one step return recur(newVal); }
在上面的語法中,使用者可以觀察到當基本條件變成 true 時我們傳回 null 以停止函數的執行。如果基本條件為 false,我們將使用輸入值執行某些操作,並使用新的參數值再次呼叫 recur() 函數。
現在,讓我們來看看遞歸的各種範例。在這裡,我們將學習首先使用 for 迴圈實作迭代演算法,然後將其轉換為遞歸方法。
範例 1(使用 for 迴圈求 1 到 n 個數字的和)
在下面的範例中,我們編寫了 sumOfN() 函數來取得 1 到 N 個數字的總和。我們使用 for 迴圈進行了 N 次迭代,並且在每次迭代中,我們將 I 的值新增到 sum 變數中。
最後回傳sum變數的值。
<html> <body> <h3 id="Using-the-i-iterative-approach-i-to-find-sum-of-n-numbers-in-JavaScript">Using the <i> iterative approach </i> to find sum of n numbers in JavaScript</h3> <div id = "content"> </div> <script> let content = document.getElementById('content'); // function to find the sum of n numbers using an iterative approach function sumOfN(n) { let sum = 0; for (let i = n; i >= 1; i--) { sum += i; } return sum; } content.innerHTML += "The sum of 1 to 10 numbers is " + sumOfN(10) + "<br>"; content.innerHTML += "The sum of 1 to 20 numbers is " + sumOfN(20) + "<br>"; </script> </body> </html>
在上面的範例中,我們使用迭代方法來求 N 個數字的總和。現在,我們將使用遞歸方法來做同樣的事情。
範例 2(使用遞迴函數求 1 到 n 個數字的和)
sumOfN() 函數是下面範例中的遞迴函數。我們透過將參數的值減 1 來重複呼叫 sumOfN() 函數。 sumOfN(N1) 傳回 N-1 個數字的總和,我們將 N 加到它以獲得 N 個數字的總和。每當 N 的值變為 1 時,它就會傳回 1,這作為停止函數執行的基本條件。
<html> <body> <h3 id="Using-the-i-recursive-approach-i-to-find-sum-of-n-numbers-in-JavaScript">Using the <i> recursive approach </i> to find sum of n numbers in JavaScript</h3> <div id = "content"> </div> <script> let content = document.getElementById('content'); // function to find the sum of n numbers using a recursive approach function sumOfN(n) { // base condition if (n == 1) { return 1; } // call function recursively by decreasing the value of n by 1. return n + sumOfN(n - 1); } content.innerHTML += "The sum of 1 to 10 numbers is " + sumOfN(10) + "<br>"; content.innerHTML += "The sum of 1 to 20 numbers is " + sumOfN(20) + "<br>"; </script> </body> </html>
讓我們來了解上面的遞歸函數是如何運作的。下面,使用者可以逐步了解遞歸函數呼叫是如何發生的。
sumOfN(5); return 5 + sumOfN(4); return 4 + sumOfN(3); return 3 + sumOfN(2); return 2 + sumOfN(1); return 1; return 2 + 1; return 3 + 3; return 4 + 6;
範例 3(合併陣列所有字串的迭代方法)
在下面的範例中,我們建立了字串陣列。我們建立了 mergeString() 函數來將陣列的所有字串合併為一個字串。我們使用 for 迴圈遍歷數組,並將所有字串一一合併到「str」變數中。
<html> <body> <h3 id="Using-the-i-iterative-approach-i-to-merge-all-strings-of-the-array-in-JavaScript">Using the <i> iterative approach </i> to merge all strings of the array in JavaScript</h3> <div id = "content"> </div> <script> let content = document.getElementById('content'); // function to merge all strings of the array using for loop function mergeString(arr) { let str = ''; for (let i = 0; i < arr.length; i++) { str += arr[i]; } return str; } let arr = ['I', ' ', 'am', ' ', 'a', ' ', 'programmer']; content.innerHTML += "The original array is: " + arr + "<br>"; content.innerHTML += "After merging all strings of the array into the single string is " + mergeString(arr) + "<br>"; </script> </body> </html>
範例 4(合併陣列所有字串的遞歸方法)
在下面的範例中,我們已將 mergeString() 函數轉換為遞歸函數。我們取得數組的第一個元素,並將其與 mergeString() 函數的傳回結果合併。 mergeString() 函數傳回合併後的最後 n-1 個陣列元素。此外,我們使用 slice() 方法從陣列中刪除第一個元素。
當數組中只剩下一個元素時,它會傳回相同的元素,該元素作為基本條件。
<html> <body> <h3 id="Using-the-i-Recursive-approach-i-to-merge-all-strings-of-the-array-in-JavaScript">Using the <i> Recursive approach </i> to merge all strings of the array in JavaScript</h3> <div id = "content"> </div> <script> let content = document.getElementById('content'); // function to merge all strings of the array using recursion function mergeString(arr) { // based condition if (arr.length == 1) { return arr[0]; } // remove the first element from the array using the slice() method. return arr[0] + " " + mergeString(arr.slice(1)); } let arr = ["I", "am", "a", "web", "developer"]; content.innerHTML += "The original array is: " + arr + "<br>"; content.innerHTML += "After merging all strings of the array into the single string is " + mergeString(arr) + "<br>"; </script> </body> </html>
使用者應該使用哪一種方法,迭代還是遞歸?
主要問題是哪一種方法比較好,迭代或遞歸,以及使用者應該使用哪一種方法。
在某些情況下,迭代方法比遞歸方法更快。此外,遞歸在迭代過程中需要更多的記憶體。對於某些演算法(例如分治法),遞歸更有用,因為我們需要使用遞歸方法來編寫更少的程式碼。此外,如果遞歸方法中未觸發基本條件,使用者可能會面臨記憶體洩漏問題。
如果我們可以將程式碼分解成更小的部分,我們應該使用遞歸方法,而為了提高程式碼的效能,我們應該使用迭代方法。
以上是如何理解 JavaScript 中的遞迴?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。1.Python以简洁语法和丰富库生态著称,适用于数据分析和Web开发。2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

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