我无法看到此递归调用中缺少的内容......
var power = function(b, e)
{
if (e===0)
{
return 1;
}
else
{
return b*power(b, e-1);
}
};
第一个if语句用于将数字捕获到零功率(总是等于1)。但它也是基本情况,所以当e(指数)达到0时,函数退出并给我正确的答案。
这是如何返回正确的数字而不是数字1?每次,e都降到0,但它会返回正确的答案,而不是1.抱歉,我是一个菜鸟,但我很困惑......
答案 0 :(得分:4)
你有一个递归函数,当它“返回1”时,它会通过堆栈帧返回并将1与其堆积的所有其他b变量相乘。 1 * b * b * b ......等等。
1 *任何东西都是身份功能。它返回自己,而不是1。
答案 1 :(得分:2)
假设您执行power(2,4)
,它会进入else
并返回2 * power(2, 3)
。在它返回之前,它必须评估它返回的表达式,因此它power(2, 3)
。
再次进入else
到return 2 * power(2,2)
。同样在这里,它必须评估表达式。你继续这样做,直到你得到它只是返回1的基本情况。现在你进入第二层底部,然后可以返回,因为它只是2*1
,所以它会进入下一个更高的位置等级,2*2*1
等等,直到达到最高等级并给出答案。
有关更多解释,请参阅this SO(同一问题)。
答案 2 :(得分:1)
在堆叠上,你将有1 * b * b * b * b ... e次。当基本案例命中时,堆栈会展开并得到正确的答案。
答案 3 :(得分:1)
这是一个执行示例:
power = function(2,2)
2与0不同,然后返回2 *函数(2,1)
-> 1 is different of 0, then return 2*function(2, 0) -> 0 equal 0 return 1 -> return 2*1
返回2 * 2 * 1
power = 4