從你的問題
引用假設我們有作爲參數的整數5。必須是5 * factorialize(5-1)= 5 * 4 = 20。我們如何達到120?
當您開始使用5 * factorialize(5 - 1)
時,您將5-1評估爲4(正確),但是後來您放棄了對該因子的調用。這就是你如何得到20.
讓我們拿這factorialize
功能,並通過它。
function factorialize(num) {
if (num === 0) {
return 1;
}
return num * factorialize(num - 1);
}
factorialize(5)
由於5通入factorialize,局部變量是num
不等於0則該函數返回num * factorialize(num - 1)
。由於num
是5,我們將繼續並開始插入數字。
= 5 * factorialize(5 - 1)
現在在這裏,我們再次呼籲factorialize
,這次傳遞4(5 - 1)。這仍然是不等於0,所以我們用它的返回值替換factorialize(5 - 1)
(因爲num
是4在此調用factorialize,我們將返回4 * factorialize(4 - 1)
= 5 * (4 * factorialize(4 - 1))
如同之前,我們現在叫factorialize再次,這一次傳遞3
= 5 * (4 * (3 * factorialize(3 - 1)))
等等
= 5 * (4 * (3 * (2 * factorialize(2 - 1))))
如此反覆
= 5 * (4 * (3 * (2 * (1 * factorialize(1 - 1)))))
現在factorialize(0)
返回1; if語句最終評估爲true。這是基本案例,這是一個已知的答案,可以表達而不用進一步使用遞歸。代,我們得到這樣的:
= 5 * (4 * (3 * (2 * (1 * 1))))
這是數學上等價於
= 5 * 4 * 3 * 2 * 1 * 1
它通過呼叫等於
= 120
步行到'factorialize(4)'...這將由於num不爲零,因此不會立即返回。那它有什麼作用? –
'factorialize(x)'將總是返回* x *的階乘。所以,'5 * factorialize(5-1)= 5 * 4! = 5 * 24 = 120' – halfo
對不起。非常感謝您的幫助,但我不明白。我們沒有循環。所有這個函數的作用是,如果number等於0,則返回1.如何num * factorialize(num-1)給我們5 * factorialize(5-1)= 5 * 4! = 5 * 24? –