我的工作包我的周圍遞歸頭,也許我太迷戀,但這裏有雲:邏輯的階乘遞歸調用
在JavaScript代碼
var factorial = function(number) {
// If the number is negative, it doesn't have a factorial. Return an
// impossible value to indicate this.
if (number < 0) {
return -1;
}
// If the number is zero, its factorial is one.
if (number === 0) {
return 1;
}
// If the number is neither illegal nor zero, call factorial again,
// this time passing in a smaller number. Eventually we'll reach 0,
// causing each call to return to its caller and the recursion terminates.
return number * factorial(number - 1);
};
factorial(5);
遞歸函數返回120像預期的那樣,但是爲什麼?
在抽出的邏輯,兩件事情我絆倒:1)這是爲什麼即使操作; 2)雖然是可操作的,爲什麼不就返回-1?
1)這是爲什麼即使操作?:
在底部繪製了這一點,堵漏5作爲參數,在return語句,我們得到的回報5 *階乘(5 - 1)。爲什麼這與預期的20相等?我們是不是調用函數返回5 * 階乘(5-1)的值?我們怎樣才能乘以5甚至還沒有確定的東西的價值呢?如果這只是5 *(5-1)= 20,那麼這是顯而易見的,甚至階乘(5)*(5-1)= 20有道理..
2)雖然是可操作的,爲什麼不它返回-1 ?:
與上面的情況下,最終,我們會在遞歸的地步,它會像1個*階乘(1-1)... 1 *(1- 1)= 0.然後用這個函數把數字插入到它自己的操作中,並且用我們的基本情況說「如果插入的整數爲零,停止操作並返回-1」。爲什麼在這裏沒有發生?
道歉,如果這似乎很簡單,我可能會使其成爲一個更大的交易比需求要。我只想學習:)。
啊哈!哇,非常感謝winOWes的清晰解釋。非常感謝你! – jb07
@ jb07如果這是正確的答案 - 你會介意標記爲這樣嗎?謝謝! – winhowes
明白了。希望我做到了這一點(我還沒有'代表'upvote呢:)) – jb07