我在以下代码中努力理解这个计算是return base * power(base, exponent - 1);
。 base是否会再次与其中包含基数的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)
?
答案 0 :(得分:3)
base是否会再次与其中包含基数的幂函数相乘?
是的,绝对的,这就是这种递归实现的实际效果。
例如,如果您展开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
有希望从这个扩展中明确为什么这是计算指数的有效(虽然很慢)方法。
答案 1 :(得分:2)
2为0或2 0 ,总是为1。
这是计算指数的递归方法。虽然Math.pow效果更好。
因此,如果指数为零,则递归结束if (exponent === 0) return 1
。如果指数不为零。然后该方法调用自己递减指数变量。
一旦方法return base * power(base, exponent - 1);
将值从堆栈中拉出并相互相乘,神奇就会发生return 1;
。
这不是最好的方法。
答案 2 :(得分:1)
内置方法Math.pow
的 自定义 实现。所以这些语句输出相同的结果:
console.log(power(2,8)); // 256
console.log(Math.pow(2, 8)); // 256
如果您需要,请改用Math.pow
。