淺談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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/279703.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/279703.shtml
英文地址,請注明出處:http://en.pswp.cn/news/279703.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

超鏈接禁用_如何在Microsoft Word中禁用超鏈接

超鏈接禁用When you type a web or email address in Word, you may notice that the program automatically formats it as a live hyperlink. This is a setting in Word’s AutoFormat feature that is on by default but can be easily turned off. 當您在Word中鍵入網站或…

ssh面試題總結

題目1:Hibernate工作原理及為什么要用? 原理: hibernate,通過對jdbc進行封裝,對 java類和 關系數據庫進行mapping,實現了對關系數據庫的面向對象方式的操作,改變了傳統的jdbc sql操作數據的方式…

SaltStack的salt-ssh使用及LAMP狀態設計部署

SaltStack的salt-ssh使用及LAMP狀態設計部署 1、salt-ssh的使用 官方文檔:https://docs.saltstack.com/en/2016.11/topics/ssh/index.html (1)安裝salt-ssh [rootlinux-node1 ~]# yum install -y salt-ssh(2)配置salt-…

程序員筆記(知識)管理的一點經驗

記筆記這件事,也許在很多人看來,再普通、簡單不過了——從小老師就教育我們要這么做。不同的人有不同的方式,我們最終的目的,還是希望不要停留在只是記錄這一層面上,而是將它們轉變為我們的知識。作為一個程序員&#…

xbox可以錄視頻聲音嗎_什么是Xbox Live Gold,它值得嗎?

xbox可以錄視頻聲音嗎If you have an Xbox One or Xbox 360, Microsoft’s Xbox Live Gold service is required to play multiplayer games online. A subscription costs $10 per month or $60 per year. Xbox Live Gold also includes additional benefits, like free games…

windows - mysql

Windows:(mysql)操作:0.下載安裝mysql www.mysql.org downloads community 5.7.21 下載5.6 Microsoft Windows 解壓到C: C:\mysql-5.6.39-winx64 C:\mysql-5.6.39-winx64\bin bin/mysql 客戶端 bin/mysqld 服務端 設置環境變量: …

顯示器選三星還是飛利浦_如何為飛利浦色相燈設置計時器

顯示器選三星還是飛利浦Maybe you want to turn off your Philips Hue lights after a certain amount of time has passed, or have them blink as a reminder. Whatever your needs, here’s how to set a timer for your Philips Hue lights to have them automatically tur…

PIE SDK與OpenCV結合說明文檔

1.功能簡介 OpenCV是基于BSD許可(開源)發行的跨平臺計算機視覺庫,可以運行在Linux、Windows、Android和Mac OS操作系統上。它輕量級而且高效——由一系列 C 函數和少量 C 類構成,同時提供了Python、Ruby、MATLAB等語言的接口&…

js的棧堆與淺拷貝、深拷貝的理解

一:什么是堆棧? 我們都知道:在計算機領域中,堆棧是兩種數據結構,它們只能在一端(稱為棧頂(top))對數據項進行插入和刪除。 堆:隊列優先,先進先出;由操作系統自動分配釋放 ,存放函數的…

python面向對象基礎語言進階

在此感謝前輩們的指導:http://python.jobbole.com/80955/ https://www.cnblogs.com/wupeiqi/p/4766801.htmlhttps://www.cnblogs.com/paomaliuju/p/5122761.html https://www.cnblogs.com/goser/articles/7097728.html http://www.cnblogs.com/alex3714/articles/52…

ea 備份碼是什么_EA的原始訪問是什么,值得嗎?

ea 備份碼是什么EA’s Origin Access gives you access to more than 70 games, discounts, and new EA games before they’re released for a monthly (or yearly) subscription fee. But is it really worth it? EA的Origin Access可讓您訪問70多種游戲,打折游戲…

Https 加密原理分析

眾所周知,HTTP 協議通過明文傳輸,是不安全的。于是,就在 HTTP 協議的基礎上,進行了數據加密,也就誕生了 HTTPS 協議。注意,HTTPS 并不是一個新的協議,它只不過是在 HTTP 的基礎上加了一層 TLS (…

JS框架_(JQuery.js)純css3進度條動畫

百度云盤  傳送門  密碼&#xff1a;wirc 進度條動畫效果&#xff1a; <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge,chrome1">…

如何在Android主屏幕上添加熱點快捷方式

Portable Wi-Fi hotspots on your Android phone are great, because hotel Wi-Fi usually isn’t, but toggling that hotspot on and off is a pain. Here are several easy ways to add a hotspot widget to your home screen. 您的Android手機上的便攜式Wi-Fi熱點很棒&…

提高關鍵詞排名的28個SEO技巧

28個讓關鍵詞排名明顯改觀的SEO技巧&#xff1a; 關鍵詞位置、密度、處理 URL中出現關鍵詞&#xff08;英文&#xff09; 網頁標題中出現關鍵詞&#xff08;1-3個&#xff09; 關鍵詞標簽中出現關鍵詞&#xff08;1-3個&#xff09; 描述標簽中出現關鍵詞&#xff08;主關鍵…

SQLI DUMB SERIES-16

&#xff08;1&#xff09;無論怎么輸入&#xff0c;都沒有回顯&#xff0c;但當輸入 admin")#時&#xff0c;顯示登錄成功。若通過其他方法獲取數據庫的用戶名&#xff0c;可通過這個方法登錄成功。 &#xff08;2&#xff09;獲取其他信息可用考慮時間延遲注入。方法同1…

如何在YouTube視頻上禁用注釋

YouTube has that betcha-can’t-watch-just-one appeal to it, which is why YouTube’s annoyances become so pronounced the more you use it. Many of these features, such as annotations can be permanently disabled, making for a more enjoyable viewing experience…

Linux目錄配置及應放置的內容

Linux目錄配置及應放置的內容 /bin&#xff1a;系統有很多放置執行文件的目錄&#xff0c;但/bin比較特殊。因為/bin放置的是在用戶維護模式下還能夠被操作的命令。在/bin下面的命令可以被root與一般賬號所使用&#xff0c;主要有cat,chmod,chown,date,mv,mkdir,cp,bash等常用命…

快速實現一個Http回調組件

2019獨角獸企業重金招聘Python工程師標準>>> 快速實現一個Http回調組件 一、前情回顧 ? 我們平時在使用一些庫的時候&#xff0c;會遇到一些看起來很舒服的寫法&#xff0c;用起來感覺很簡單&#xff0c;而且寫法也很優雅&#xff0c;比如OkHttp&#xff0c;或者是…

MyBatis緩存通俗易懂

1.1 mybatis緩存介紹 如下圖&#xff0c;是mybatis一級緩存和二級緩存的區別圖解&#xff1a; Mybatis一級緩存的作用域是同一個SqlSession&#xff0c;在同一個sqlSession中兩次執行相同的sql語句&#xff0c;第一次執行完畢會將數據庫中查詢的數據寫到緩存&#xff08;內…