这是一项新任务。我想要的答案/输出是正确的。我只是不明白为什么。如果电源功能与我检查的数字相匹配,我希望输出为真。我确实得到了这些例子的答案,但我不明白这个递归函数是如何工作的。
在这个函数的else中,我说base *函数本身。甚至代表什么? base * power(base, exponent - 1);
如何计算?它不应该只是围成一圈然后最终结束?
console.log(power(2,4) === 16);
console.log(power(2,3) === 8);
console.log(power(2,2) === 4);
var power = function(base, exponent) {
if(exponent === 0) {
return 1;
}
else {
return base * power(base, exponent - 1);
}
};
答案 0 :(得分:5)
函数power返回一个整数,所以当函数返回base * <some_integer>
时,表达式是完全有效的。追踪这些东西的最好方法是使用笔和纸:
调用电源堆栈(2,4):
power(2, 4) = 2 * power(2, 3)
power(2, 3) = 2 * power(2, 2)
power(2, 2) = 2 * power(2, 1)
power(2, 1) = 2 * power(2, 0)
power(2, 0) = 1 <--base case
现在你所要做的就是用调用堆栈中的值替换
power(2, 4) = 2 * 8 = 16
power(2, 3) = 2 * 4 = 8
power(2, 2) = 2 * 2 = 4
power(2, 1) = 2 * 1 = 2
答案 1 :(得分:0)
使用Javascript的语法糖声明样式编写函数可能会有所帮助:
console.log(power(2,4) === 16);
console.log(power(2,3) === 8);
console.log(power(2,2) === 4);
function power(base, exponent) {
if(exponent === 0) {
return 1;
}
else {
return base * power(base, exponent - 1);
}
};
如果需要,您还可以添加
行console.log("power("+base+", "+exponent+")");
在函数的头部,观察递归调用序列。
答案 2 :(得分:0)
答案 3 :(得分:0)
对于权力(2,4)的例子,我们有
所以它通过调用返回到2 * power(2,0),我们知道power(2,0)== 1.返回2。 然后它回到2 *功率(2,1),我们知道功率(2,1)== 2,因为[2 *功率(2,0)]。这将返回4.
看模式?等等,直到我们回到2 *功率(2,3)== 16,因为我们有功率(2,3)== 8因为[功率(2,2)*功率(2,1)*功率(2) ,0)* 1]。希望这有帮助!