新聞中心
這篇文章將為大家詳細講解有關(guān)JavaScript中遞歸是什么,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
成都創(chuàng)新互聯(lián)公司自2013年起,先為平川等服務(wù)建站,平川等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為平川企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。JavaScript中的遞歸就是指函數(shù)反復(fù)調(diào)用自己的過程,函數(shù)的調(diào)用是建立在堆棧中,在堆棧的頂部函數(shù)調(diào)用總是第一個彈出的。我們可以通過瀏覽器自帶的開發(fā)工具來查看堆棧的調(diào)用
真正的理解JavaScript 中的遞歸是非常困難的,有的人甚至把它稱為不必要的內(nèi)存密集型和復(fù)雜版本的“for循環(huán)”。接下來將在文章中為大家詳細介紹這個知識,希望對大家有所幫助。
編程中的遞歸是什么?
實質(zhì)上, 遞歸是指函數(shù)或子例程反復(fù)調(diào)用自己的時候。所有遞歸函數(shù)調(diào)用都必須有一個基本情況?;厩闆r是讓函數(shù)返回值而不是再次調(diào)用自身的特定條件。為了防止遞歸函數(shù)無限調(diào)用自身, 必須存在基本情況。如果省略或?qū)懭氩徽_, 就會出現(xiàn)錯誤。
不正確的基本情況指的是一個基本情況它不包括所有可能的用戶輸入, 這可能會導(dǎo)致因通過基本情況的特定輸入而導(dǎo)致無休止的遞歸函數(shù)的調(diào)用, 從而導(dǎo)致調(diào)用堆棧溢出。
函數(shù)調(diào)用存儲在調(diào)用堆棧上
函數(shù)的調(diào)用都是存儲在堆棧中,調(diào)用堆棧是堆棧數(shù)據(jù)結(jié)構(gòu)的特定實現(xiàn)。它是一個 LIFO (最后進入, 首先輸出) 數(shù)據(jù)結(jié)構(gòu), 這就意味著放置在堆棧頂部的函數(shù)調(diào)用是第一個彈出的。
例:計算5的階乘
輸出結(jié)果為:120
上述代碼中,當解析到console.log(factorial(5));
時,
首先console.log()將被推送到堆棧上,之后factorial(5) 其結(jié)果將傳遞到console.log()函數(shù)中,當我們輸入factorial(5)時, 調(diào)用堆棧將如下所示
語句return num * factorial(nextNum);
表示階乘函數(shù)返回num (本例中表示5) 乘以遞歸函數(shù)調(diào)用的返回值, 其中4被傳入。實質(zhì)上, 該函數(shù)返回以下值
return 5 * factorial(4);
因為factorial(4)是一個函數(shù), 所以我們將把這個函數(shù)調(diào)用推送到調(diào)用堆棧上?,F(xiàn)在我們將重復(fù)相同的過程, 直到我們到達基本情況 i. 當num等于1時。此時, 調(diào)用堆棧將如下所示。
一旦我們到達基本情況, 函數(shù)factorial(1)返回值1。因此現(xiàn)在我們知道factorial(1)等于 1, factorial(2) ) 也返回一個非函數(shù)值: 2 * factorial(1) , 即 2 * 1 = 2。
接著, factorial(3)返回3 * factorial(2), 等于6。等等, 直到我們得到factorial(5), 它返回 5 * 24 = 120。
如何查看調(diào)用堆棧
如果使用的是 chrome web 瀏覽器,可按 f12 (在 Windows 上), 打開chrome 開發(fā)人員工具。在頂部選項卡上, 您將看到菜單標簽, 如元素、配置文件、控制臺、網(wǎng)絡(luò)、源等。單擊"源"。如下所示
通過該開發(fā)工具可以直觀地查看調(diào)用堆棧。當遞歸函數(shù)調(diào)用num === 1的條件時, 它將返回1。之后, 當函數(shù)調(diào)用返回時, 每個階乘函數(shù)調(diào)用都將從堆棧中彈出。
關(guān)于JavaScript中遞歸是什么就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
分享名稱:JavaScript中遞歸是什么-創(chuàng)新互聯(lián)
轉(zhuǎn)載來于:http://fisionsoft.com.cn/article/cdidch.html