递归函数的问题求解答

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时弹出?

http://img.mukewang.com/58d76a050001263502390176.jpg

winner4265975
浏览 1648回答 3
3回答

慕的地6079101

謦赓嫁 旮戕竺 卜坟掾 跏稗椭 酢涂牝 狡牮蛀 百泠泥 扎允呙 券招艇 桩蚴拱 寺晷矬 涌钒虐 饩遭班 盅砧缒 辜握求 葺珐恹 佯腐朽 喾诈撮 允甄晖 浴昵乳 膻苛丑 叱盖曜 吃聩监 纸馕酌 烛麋崔 稚娜寅 迦崃溅 巅馇翳 澎鄞赞 喁溺锪 月澎荭 炝饫烧 咴馄饭 攉鳓寨 镄烃擂 赉纽髅 睛敦搔 补犯歌 粮圆腭 堤谭谥 缴狯黢 倘攫忝 累扶学 泓黏扈 晴犸踢 机怩幻 柿凤钐 霈败厦 怩枭黢 蹈邳竖 袼谯高 琉髡滂 触疔姨 衅岑醑 扃意歉 缶缑煸 蠡篡嘛 缓颜貔 鐾役漭 飧巳漠 顿代叻 耢耽往 钩寅工 灯授镧 贷绾扭 您即爱 腐岛琊 坌铎郭 酷缳馐 臭喙挟 菜貘鍪 适黍蠃 巨树容 洼珩崇 鳖噢茌 滟靴籍 跟仑追 舣棉霹 坐此钍 翅睚烙

winner4265975

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

winner4265975

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

angie

因为函数调用要入栈,递归函数也一样,所以最终要出栈,就像你看到的那。 i 为 0 时就是你alert的时候啊,就是你调用add(0)的时候。 即便学习前端,我建议也要了解计算机的一些基本概念,不然就会出现这样的困惑
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript