日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

浅谈javascript递归(白话版)

發布時間:2023/12/6 javascript 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浅谈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递归(白话版)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。