2014-12-05 40 views
1

在下面的腳本中,爲什麼badFactorial是堆棧而goodFactorial工作?JavaScript因子遞歸

function badFactorial(n){ 
    if(n < 0){ 
     return 1; 
    } 
    if(n < 2){ 
     return n; 
    } 
    return badFactorial(n * (n-1)); 
} 
function goodFactorial(n){ 
    if(n < 2){ 
     return n; 
    } 
    return goodFactorial(n-1) * n; 
} 
+1

你用什麼叫'badFactorial'? – 2014-12-05 14:50:53

+2

,因爲它的目的是這樣嗎? (以名稱命名) – 2014-12-05 14:52:39

+0

因爲在badFactorial(n *(n-1))中,n的值總是呈指數增長。它永遠不會達到0.這就是爲什麼你會得到這個錯誤。而在第二種情況下,每次遞減n對於任何遞歸函數都非常重要。 – mohamedrias 2014-12-05 14:54:29

回答

5

您creatng的無限循環

badFactorial(n * (n-1));

它只會不斷增加。

說你過7。而不是減少,youre做

return badfactorial(7 * 6)

當你想:

return badfactorial(6) * 7;

因此改變返回要像您選擇goodfactorial的,

badfactorial(n-1) * n;

2

由於

badFactorial(n * (n-1)) 

n的值總是增加,它永遠不會達到0.這就是爲什麼你會得到這個錯誤。

而在第二種情況下,

return goodFactorial(n-1) * n; 

n爲每個爲任何遞歸函數非常重要的時間遞減。

永遠記住在遞歸調用方面,n或任何參數的值必須減少,否則你會得到stackoverflow錯誤。