为了账号安全,请及时绑定邮箱和手机立即绑定

递归函数的问题求解答

递归函数的问题求解答

winner4265975 2017-03-26 15:17:38
function add(i){     if(i==3){         return i;     }     else{          add(++i);     } alert(add(3))//3 alert(add(0))//undefined我知道这个是关于执行环境栈的问题,但是是具体原因还是不太明白求高手详细分析下,我用debugger看了add(0)当i==3走了return为什么函数还继续?然后i再减小到1弹出结果undefined,为什么不是i为0时弹出?
查看完整描述

3 回答

?
winner4265975

TA贡献19条经验 获得超17个赞

我明白原因了这个就是返回值的问题,只有i为3时才有返回值,其余没有返回值,当然是undefined。还有谢谢下面的同学,看来我要重新看看数据结构了!

查看完整回答
反对 回复 2017-03-26
?
winner4265975

TA贡献19条经验 获得超17个赞

//img1.sycdn.imooc.com//58d7a8ac00017ba002830171.jpg

换成i+1就是i减小到0弹出,我觉得是弹出的是add(0);改成i++就有错误Maximum call stack size exceeded 死循环了!这和 i++和++i有关的                     

查看完整回答
反对 回复 2017-03-26
?
angie

TA贡献56条经验 获得超8个赞

因为函数调用要入栈,递归函数也一样,所以最终要出栈,就像你看到的那。 i 为 0 时就是你alert的时候啊,就是你调用add(0)的时候。 即便学习前端,我建议也要了解计算机的一些基本概念,不然就会出现这样的困惑
查看完整回答
反对 回复 2017-03-26
  • winner4265975
    winner4265975
    求解为什么i==3时没有返回值?还有执行环境入栈是保存这个函数的参数局部变量和返回地址么?
  • 3 回答
  • 0 关注
  • 1580 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信