2012-05-20 26 views
0

我正在學習JavaScript,其中一個練習是編寫一個權力函數。我也應該學習數學,因爲這肯定聽起來很愚蠢。

我直覺地知道$ 2^4 = 16 $,因爲$ 2 * 2 * 2 * 2 = 16 $。但通過閱讀功能,看來,它應該返回12,而不是16

如果我們插上數字,它應該是這樣的:$$ 2 *(2 *(4 - 1))= 12 $$

var power = function(base, exponent) { 
    if (exponent === 0) return 1; 
    return base * power(base, exponent - 1); 
}; 
power(2,4); 
===> 16 

顯然我必須讀錯誤的功能。但是如何?

+0

這是一個基本尾遞歸的例子,如果你有興趣。 – Argon

回答

1

如果$函數$由$ F $表示該遞歸返回16.:

F(2,4)= 2 * F(2,3)= \點= 2 * 2 * 2 * 2 * F(2,0)= 2 * 2 * 2 * 2 * 1 = 16

更一般地,

F(A,b)= A * ... * A * 1 < - n次。

+0

我會給你一票,但我不能投票。我肯定需要在我的數學上工作,因爲這有點超過我的頭$ 2 * 2 * 2 * 2 * f(2,0)$,因爲我無法看到我們是如何從$ 2 * f(2, 3)$。 – 2012-05-20 14:47:19

+0

@Elmer記住,代碼中的$$ f(base,exponent)= base * f(base,exponent-1)$$。這個遞歸繼續下去,直到我們得到$ f(2,0)$,從代碼中,它等於1. – Argon

0

這可能有助於從頭開始考慮函數的行爲。

所以,當指數等於$ 0 $將返回$ 1 $,這將是採取基本的時間,而這一切將再次由基增多,等等,等等:

$$ (((2^0 * 2)* 2)* 2)\ ldots)* 2 $$

2

您的函數被正確編寫,您可以通過分析函數的結果開始遞歸進度和指數降低。

  1. 參數:2,4。結果:2 *功率(2,3)= 2 * 8 = 16。
  2. 參數:2,3。結果:2 *功率(2,2)= 2 * 4 = 8.
  3. 參數:2,2結果:2 * power(2,1)= 2 * 2 = 4
  4. 參數:2,1結果:2 * power(2,0) = 2 * 1 = 1。
  5. 參數:2,0。結果:1.

希望那是有幫助的。

+0

我明白了。該函數一遍又一遍地調用自己!萬分感謝!這真的很有幫助! – 2012-05-20 14:48:45

+0

是的,這實際上是遞歸的基本原理之一。 –

0

的關鍵是遞歸

power(2,4) 
    = 2 * power(2,3) 
    = 2 * (2 * power(2,2)) 
    = 2 * (2 * (2 * power(2,1))) 
    = 2 * (2 * (2 * (2))) 
    = 16 

power調用本身具有較小的指數,自稱等,直到指數爲1,對於這個問題的答案僅僅是基礎。

相關問題