2012-03-02 50 views
1

我在下面的代碼中努力瞭解這個計算是return base * power(base, exponent - 1);。底座再乘以具有底座的power功能嗎?有人可以幫助我理解此代碼中發生了什麼?

var power = function(base,exponent){ 
     if(exponent === 0){ 
      return 1; 
     } else { 
      return base * power(base, exponent - 1); 
     } 
}; 

power(2,2); 

這是否意味着return base = 2*(2,2-1)

回答

3

基座再乘以裏面有基座的冪函數嗎?

是的,絕對的,這就是這個遞歸實現的工作原理。

如果您例如擴大power(10, 4)你:

power(10, 4) 
= 10 * power(10, 3) 
= 10 * 10 * power(10, 2) 
= 10 * 10 * 10 * power(10, 1) 
= 10 * 10 * 10 * 10 * power(10, 0) 
= 10 * 10 * 10 * 10 * 1 

應該很有希望清楚這種擴張正是爲什麼這是一個有效的(雖然速度慢)的方式來計算指數。

+0

這是一個完整的答案。但僅供參考,這遠不止於速度慢,當需要性能時,函數調用實際上非常昂貴。除此之外,這僅適用於指數爲正整數。 – 2012-03-02 15:12:24

2

這2上升到0功率或2 這始終是1。

這是計算的指數的遞歸方法。雖然Math.pow效果更好。

所以如果指數爲零,則遞歸結束if (exponent === 0) return 1。如果指數不爲零。然後該方法調用自己遞減指數變量。

發生了奇蹟return base * power(base, exponent - 1);一旦方法return 1;的值從堆棧中拉出並相乘。

這不是最好的辦法。

+0

感謝您的回覆,對不起,我只是想了解什麼樣的價值實際返回這裏時,計算呢? – styler 2012-03-02 15:03:42

1

這是定製實現內置方法Math.pow的。所以,這些語句輸出相同的結果:

console.log(power(2,8)); // 256 
console.log(Math.pow(2, 8)); // 256 

在您需要的,請使用Math.pow代替的情況。

相關問題