溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

JavaScript中遞歸是什么

發(fā)布時間:2020-08-26 10:31:32 來源:億速云 閱讀:143 作者:小新 欄目:web開發(fā)

這篇文章將為大家詳細講解有關(guān)JavaScript中遞歸是什么,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

JavaScript中的遞歸就是指函數(shù)反復(fù)調(diào)用自己的過程,函數(shù)的調(diào)用是建立在堆棧中,在堆棧的頂部函數(shù)調(diào)用總是第一個彈出的。我們可以通過瀏覽器自帶的開發(fā)工具來查看堆棧的調(diào)用

真正的理解JavaScript 中的遞歸是非常困難的,有的人甚至把它稱為不必要的內(nèi)存密集型和復(fù)雜版本的“for循環(huán)”。接下來將在文章中為大家詳細介紹這個知識,希望對大家有所幫助。

JavaScript中遞歸是什么

編程中的遞歸是什么?

實質(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的階乘

<script>
 function factorial(num) {
    var nextNum = num - 1;
    if (num === 1) {
        return num; 
    }
    return num * factorial(nextNum);
}
console.log(factorial(5));
</script>

輸出結(jié)果為:120

上述代碼中,當解析到console.log(factorial(5));,首先console.log()將被推送到堆棧上,之后factorial(5) 其結(jié)果將傳遞到console.log()函數(shù)中,當我們輸入factorial(5)時, 調(diào)用堆棧將如下所示

JavaScript中遞歸是什么

語句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)用堆棧將如下所示。

JavaScript中遞歸是什么

一旦我們到達基本情況, 函數(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ò)、源等。單擊"源"。如下所示

JavaScript中遞歸是什么

通過該開發(fā)工具可以直觀地查看調(diào)用堆棧。當遞歸函數(shù)調(diào)用num === 1的條件時, 它將返回1。之后, 當函數(shù)調(diào)用返回時, 每個階乘函數(shù)調(diào)用都將從堆棧中彈出。

關(guān)于JavaScript中遞歸是什么就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI