[英]Can you explain this JavaScript function for me?
function countup(n) {
if (n < 1) {
return [];
} else {
const countArray = countup(n - 1);
countArray.push(n);
return countArray;
}
}
console.log(countup(5)); // [ 1, 2, 3, 4, 5 ]
你們能否向我解釋一下這個 function 是如何工作的,以及變量“countArray”何時會將元素推送到數組中。
它是一個遞歸 function ,它將從1
到n
的所有數字放入一個數組中。 讓我們看一下n = 5
的示例:
你輸入 function 並檢查n
是否小於1
,因為不是這種情況,你跳到 else 語句,其中數組countArray
用 countup countup(n - 1)
的值初始化,因此你從頭開始function,但n = 4
。
這會發生多次,直到n
為0
,在這種情況下,第一個 if 語句為真。 通過此退出條件,function 返回一個空數組,該數組被分配給前一個遞歸“層”中 function 調用中的變量countArray
。 之后,將該“層”上等於1
的變量n
推入數組中。 最后這些步驟也會發生多次,因為countArray
返回到遞歸 function 的下一次調用,與返回空數組的方式相同。
在執行所有遞歸 function 調用后,返回結果數組[1,2,3,4,5]
這個 function 將首先檢查變量n < 1
如果它更大,它將以n-1
自行運行
If n
is 0
, the function will return an empty Array and will go one "layer" back to the last function countup countup(1)
It will now add n (1)
to the countArray and return this Array to the "last" function Now function countup countup(2)
已在其countArray
中收到數字1
,它將返回此數字。 [1, 2]
它將重復此過程,直到達到“最后一個”/“第一個” function ( countup countup(5)
) 並將返回包含所有數字[1, 2, 3, 4, 5]
的countArray
要理解遞歸,有時您需要手動跟蹤代碼的執行。 現在下面的行導致遞歸調用並從數字中減一,然后將其傳遞給遞歸調用。
const countArray = countup(n - 1);
現在想象一下,如果您將 5 傳遞給最初的 function 調用,如下所示:
countup(5);
由於 5 不小於 1, else
塊將被執行。 else 塊中的第一行是遞歸調用。 因此,當您的程序遇到遞歸調用時,它會停止當前 function 的執行,直到該遞歸 function 調用結束/返回。 所以第一個遞歸調用將是:
const countArray = countup(4);
因此,將重復相同的過程,直到n
等於0
。 由於 0 小於 1,if 條件將評估為true
。 它將返回一個empty array
。
遞歸調用后,將數字推送到遞歸調用返回的數組中。 所以該點的數組將包含[0]
然后[0, 1]
並且它將繼續添加數字,直到計算出所有遞歸調用,然后它將執行初始 function 調用的 rest。
很多時候,遞歸可以被循環代替,但情況並非總是如此。 作為一名程序員,應該意識到這個重要的話題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.