我正在学习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 :(得分:2)
您的函数编写正确,您可以在递归进行和指数减少时分析函数的结果开始。
希望这很有用。
答案 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,答案只是基数。