當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
浅谈javascript递归(白话版)
生活随笔
收集整理的這篇文章主要介紹了
浅谈javascript递归(白话版)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
遞歸
遞歸是一種解決問題的方法,通常我們可以理解成函數調用自身;
什么遞歸?遞歸怎么寫?
首先直接調用自身的方法和函數,他是一個遞歸,我們看代碼: 復制代碼 var recursiveFun = function(params){recursiveFun(params); } // or var recursiveFun1 = function(params){recursiveFun2(params); } var recursiveFun2 = function(params){recursiveFun1(params); } 復制代碼假設現在我們要執行recursiveFun() or recursiveFun1(); 從上面函數,我們能知道他會一直重復調用;因此,每個遞歸函數都需要有邊界條件,我們通俗一點,可以叫它停止點,作用是為了防止無限遞歸。
如果防止遞歸停止,無限遞歸帶來的問題
我們先思考一個問題,如果忘記加上停止遞歸函數的邊界條件,會發生什么呢? 會一直執行函數嗎?
答案是不會,遞歸并不會無限的執行下去,瀏覽器會拋出錯誤,也就是所謂的棧溢出錯誤;我們可以通過以下代碼來測試:
var i = 0; var recursiveFun = function(){i++;recursiveFun(); } try {recursiveFun(); } catch (err) {console.log(`i=${i}error:${err}`) } 復制代碼 以上是運行結果,從圖中我們能看出在執行15661次后瀏覽器給我們拋出了錯誤:RangeError: Maximum call stack size exceeded; 超過最大調用棧大小; 我們如何停止遞歸呢;我們只需要加一個條件即可;假設我們條件是當i累加到100的時候停止。代碼如下: var i = 0; var recursiveFun = function(){if (i > 100) return;i++;recursiveFun(); } try {recursiveFun(); } catch (err) {console.log(`i=${i}error:${err}`) } 復制代碼總結
我們得到一個結論,具有停止遞歸的邊界條件很重要;
轉載于:https://juejin.im/post/5cb02d15f265da03b8583fd3
總結
以上是生活随笔為你收集整理的浅谈javascript递归(白话版)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言基础(五)
- 下一篇: gradle idea java ssm