2014-10-11 66 views
0
function fac(n) { 
    if (n == 0) 
    return 1; 
    else 
    return (n - 1) * n; 
}; 
console.log(fac(4)); 
// 12 

的邏輯在這裏都清楚了(4-1)×4 = 12無法理解計算

function fac(n) { 
    if (n == 0) 
    return 1; 
    else 
    return fac(n - 1) * n; 
}; 
console.log(fac(4)); 
//24 

這裏是我得到混淆是遞歸調用?因爲我們在內部返回fac函數是否有用?我明白如何在這個例子console.log(fac(4));,一般來說調用函數,但我不明白它是如何計算返回fac(n - 1)* n; 我有人可以解釋計算是如何進行的,另外一個我未提供的代碼在這兩個例子中是不同的,一個只返回值而另一個返回什麼?功能函數....這裏是我困惑的地方。 謝謝你的時間!

+0

我認爲你在這裏有格式化問題,應該是2個獨立的代碼塊? – 2014-10-11 16:31:07

回答

1

是的,這是一個遞歸調用。該函數繼續調用自身並遞減參數,直到傳遞的值爲0.該函數不會自行返回,它將自行調用並返回結果。這是有效的,因爲該函數在作爲參數傳遞0時終止並停止調用自身。

如此這般

fac(4) - >fac(3) * 4 - >fac(2) * 3 * 4 - >fac(1) * 2 * 3 * 4 - >fac(0) * 1 * 3 * 4 - >1 * 1 * 2 * 3 * 4 - >24

0

是的,它被稱爲遞歸。

值上計算方法爲對fac(4)如下:

fac(4) = fac(3) * 4 
fac(3) = fac(2) * 3 
fac(2) = fac(1) * 2 
fac(1) = fac(0) * 1 
fac(0) = 1 

所以最終它會像

fac(4) = 1 * 1 * 2 * 3 * 4 

這是它如何被評估,因此你會得到你的階乘值。