最近我開始學習 JavaScript 中的遞回。
我從來沒有在自己的函式中呼叫定義函式。這個叫什么?
我無法理解這個 recur(n - 1) 是如何作業的。
我試圖檢查它在 chrome 除錯器中的作業方式,但也沒有輸出。
How here recur(n - 1) working?
function recur(n) {
if(n === 1) return 1
return n * recur(n - 1);
// How here recur(n - 1) working?
// 5 * 5 - 1 = 24
// 4 * 4 - 1 = 15
}
recur(5);
uj5u.com熱心網友回復:
所以當你回傳 n * recur(n - 1) 時,首先計算的是 recur(n - 1)。會發生以下情況
recur(5) = 5 * recur(5 - 1)
recur(4) = 4 * recur(4 - 1)
recur(3) = 3 * recur(3 - 1)
recur(2) = 2 * recur(2 - 1)
recur(1) = 1 => the bottom of the recursion. Now it starts to go back:
recur(2) = 2 * recur(1) = 2
recur(3) = 3 * recur(2) = 3 * 2 = 6
recur(4) = 4 * recur(3) = 4 * 6 = 24
recur(5) = 5 * recur(4) = 5 * 24 = 120
基本上,直到 recur(n - 1) 的函式回傳一些具體的東西,比如你的案例 1 中遞回的底部,該方法再次呼叫 recur ,以此類推。到底部后,函式開始以相反的順序決議。
uj5u.com熱心網友回復:
遞回函式正在計算的階乘。
該函式將呼叫自身,直到達到基本情況。
你有一個基本情況:when is then return 1。nn1
如果你用 say 呼叫它,5那么它的作業原理如下:
recur(5) =>
5 * recur(4) =>
5 * 4 * recur(3) =>
5 * 4 * 3 * recur(2) =>
5 * 4 * 3 * 2 * recur(1) =>
5 * 4 * 3 * 2 * 1 =>
120
所以結果將是 120 n=5。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/455700.html
標籤:javascript 递归 dsa
上一篇:列印素數的程式
