(非常简单的递归)我错过了什么
(VERY simple recursion) what am I missing?
我看不到我在这个递归调用中缺少什么......
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。对不起,我是菜鸟,但我很困惑...
你有一个递归函数,当它"返回 1"时,它会回到堆栈帧中,并将 1 乘以它堆叠起来的所有其他 b 变量。 1*b*b*b... 等等。
1*任何东西都是恒等函数。它返回自身,而不是 1。
假设你做power(2,4)
,它将进入else
并返回2 * power(2, 3)
。在它可以返回之前,它必须计算它返回的表达式,因此它确实power(2, 3)
.
这再次进入else
以return 2 * power(2,2)
.同样的交易在这里,它必须评估表达式。你一直这样做,直到你到达你的基本情况,它只返回 1。现在你进入倒数第二层,它可以返回,因为它只是2*1
,所以它会进入下一个更高的层次,这将是2*2*1
的,依此类推,直到它到达最顶层并给你答案。
有关更多解释,请参阅此SO(同一问题)。
在堆栈上,您将有 1*b*b*b*b... e 次。当基本情况命中时,堆栈展开,您得到正确答案。
下面是
一个执行示例:
功率 = 功能(2, 2)
2与 0 不同,则返回 2*函数(2, 1)
返回 2*-> 1 is different of 0, then return 2*function(2, 0) -> 0 equal 0 return 1 -> return 2*1
2*1
功率 = 4
相关文章:
- 我错过了什么让ScrollSpy工作
- 验证启动但不启动't显示故障信息.我错过了什么?MVC 5 Razor
- 无法在单个网页上加载所有谷歌图表;我是不是错过了什么
- 谷歌可视化时间轴图表日期奇怪地休息了一个月…我错过了什么
- 在fter.js插件工作之前,我错过了什么
- 在将 java 添加到 HTML 时遇到问题,我错过了什么
- 这个正则表达式我错过了什么
- 在 JavaScript 中,条件语句中 OR 运算符的正确语法是什么?我错过了什么
- if 语句中的一部分 JavaScript 代码运行,而同一块中的其余代码不执行.我在这里错过了什么
- (非常简单的递归)我错过了什么
- 我正在尝试删除重复项并返回结果.我错过了什么
- 无法让插座工作 - 我错过了什么愚蠢的东西
- 我是javascript的新手,我正在从url获取JSON数据,我只能在成功函数中访问数据,我错过了什么
- 安装jQuery-我错过了什么
- ECMA 6的兼容性看起来很糟糕.我错过了什么
- myArray.push([“dog”,3]);应该把狗和3推到最后,但没有,我在这里错过了什么
- 函数没有定义,但我很确定我定义了.我错过了什么?
- 客户端应该调用服务器还是服务器应该调用客户端?我错过了什么?
- 在里面切换,重复我错过了什么
- 遍历JavaScript我错过了什么