当馈送$ 2 ^ 4 $时,这个电源功能不应该返回12吗?

时间:2012-05-20 14:33:31

标签: javascript math

我正在学习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

显然我必须阅读错误的功能。但是如何?

4 个答案:

答案 0 :(得分:2)

您的函数编写正确,您可以在递归进行和指数减少时分析函数的结果开始。

  1. 参数:2,4。结果:2 * power(2,3)= 2 * 8 = 16。
  2. 参数:2,3。结果:2 * power(2,2)= 2 * 4 = 8.
  3. 参数:2,2。结果:2 *功率(2,1)= 2 * 2 = 4.
  4. 参数:2,1。结果:2 * power(2,0)= 2 * 1 = 1。
  5. 参数:2,0。结果:1。
  6. 希望这很有用。

答案 1 :(得分:1)

这递归返回16.如果$ function $由$ f $表示:

f(2,4)= 2 * f(2,3)= \ dots = 2 * 2 * 2 * 2 * f(2,0)= 2 * 2 * 2 * 2 * 1 = 16

更一般地说,

f(a,b)= a * ... * a * 1< - n次。

答案 2 :(得分:0)

从结尾开始,考虑函数的行为可能会有所帮助。

因此,当指数等于$ 0 $时,它将返回$ 1 $,这将取基数,并且所有这些将再次乘以基数,依此类推,所以:

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

答案 3 :(得分: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,答案只是基数。