javascript递归是怎么运行实现的,想不明白

yuji821 2018-08-22 08:56:39
function power(a, b) {

if (b == 0) {
return 1;
}
else {
return a * power(a,b - 1);
}
}

这个函数是怎么实现递归的,就是一步一步是怎么实现幂运算的,举例
power(3,5);

这个函数是怎么一步一步运行实现的,想不明白
...全文
757 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
简明教程 2018-09-04
  • 打赏
  • 举报
回复
nayi_224 2018-08-27
  • 打赏
  • 举报
回复
引用 7 楼 weixin_42270642 的回复:
[quote=引用 2 楼 nayi_224 的回复:]
power(3, 5)
3 * power(3, 4)
3 * 3 * power(3, 3)
3 * 3 * 3 * power(3, 2)
3 * 3 * 3 * 3 * power(3, 1)
3 * 3 * 3 * 3 * 3 * power(3, 0)
3 * 3 * 3 * 3 * 3 * 1

为什么会增加 "3*"? return的值不是只有 a * power(a,b - 1) 这一部分吗?[/quote]

在第一次调用时,a = 3; b = 5。带入进去之后就是3 * power(3, 4)。后面的以此类推。
象话 2018-08-27
  • 打赏
  • 举报
回复
其实就是循环了,所有的循环都可以用递给来实现。
回首过去_ 2018-08-26
  • 打赏
  • 举报
回复
引用 2 楼 nayi_224 的回复:
power(3, 5)
3 * power(3, 4)
3 * 3 * power(3, 3)
3 * 3 * 3 * power(3, 2)
3 * 3 * 3 * 3 * power(3, 1)
3 * 3 * 3 * 3 * 3 * power(3, 0)
3 * 3 * 3 * 3 * 3 * 1

为什么会增加 "3*"? return的值不是只有 a * power(a,b - 1) 这一部分吗?
天际的海浪 2018-08-26
  • 打赏
  • 举报
回复

这个问题的思想是:
如你(a)是要计算3的5次方,你不会计算。你可以找另一个人(b)给你算出3的4次方,然后你再乘上3不就是3的5次方了么。
但是你找的人(b)也不会计算3的4次方,b也找另一个人(c)给他算出3的3次方。
c也不会计算3的3次方,也找另一个人(d)给他算出3的2次方。
d也不会计算3的2次方,也找另一个人(e)给他算出3的1次方。
最后e会计算3的1次方了。把结果告诉d。
d知道结果后再乘上3,把结果告诉c。
c知道结果后再乘上3,把结果告诉b。
b知道结果后再乘上3,把结果告诉a。

按上面的思路写成js代码就是
function powerA(a) {
return a * powerB(a);
}
function powerB(a) {
return a * powerC(a);
}
function powerC(a) {
return a * powerD(a);
}
function powerD(a) {
return a * powerE(a);
}
function powerE(a) {
return a * 1;
}
alert(powerA(3));

但是这样太麻烦。其实abcd这几人的工作都是一样的,你根本就不需要找别人,每次都自己找你自己来做子问题就行了。
这种自己找自己的方式就是递归。也就是楼主发的那个代码。
晓阳陌 2018-08-25
  • 打赏
  • 举报
回复
递归就是自调用啊
花语记懿 2018-08-25
  • 打赏
  • 举报
回复
power(3,5),其中a=3,b=5,初次进入函数,执行第一步,b不等于0,进入下一步,得出结果3*power(3,4);此时a=3,b=4;进入b不等于0;进入下一步,得出3*3*power(3,3),同理继续执行;当得到结果3*3*3*3*3*power(3,0)时,a=3,b=0,带入执行,此时b满足第一个条件,遇到return就退出来,b=1,return后面的值就等于最好输出的值,所以最后结果为3*3*3*3*3*1;
Jason-Jin 2018-08-24
  • 打赏
  • 举报
回复
递归跟js语言本身没有关系

给你举一个通俗易懂的例子:

查字典就是典型的递归,你一层一层的查下去,比如你查一个单词,然而他用另外一个句子去解释这个单词,然后这个句子中某些单词你又不知道,继续查这个单词,直到你最后一次全部单词都直到了,然后向上递归,上面那个你也直到了,,最后你要查的你也直到了~
75闪光雷 2018-08-23
  • 打赏
  • 举报
回复
引用 2 楼 nayi_224 的回复:
power(3, 5) 3 * power(3, 4) 3 * 3 * power(3, 3) 3 * 3 * 3 * power(3, 2) 3 * 3 * 3 * 3 * power(3, 1) 3 * 3 * 3 * 3 * 3 * power(3, 0) 3 * 3 * 3 * 3 * 3 * 1
可以说是很生动形象了
nayi_224 2018-08-22
  • 打赏
  • 举报
回复
power(3, 5)
3 * power(3, 4)
3 * 3 * power(3, 3)
3 * 3 * 3 * power(3, 2)
3 * 3 * 3 * 3 * power(3, 1)
3 * 3 * 3 * 3 * 3 * power(3, 0)
3 * 3 * 3 * 3 * 3 * 1

87,997

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧