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

关于Js函数调用过程的一道题,求大神赐教

关于Js函数调用过程的一道题,求大神赐教

榎目贵音 2016-04-03 22:51:22
function abc(num1){    if(num1>3){        abc(--num1); } document.writeln(num1);  }    abc(5);为什么最后输出出来是3 3 4?而下面这个代码为什么会出错?function abc(num1){    if(num1>3){        abc(num1--); } document.writeln(num1);  }    abc(5);求大神解惑,小白感激不尽
查看完整描述

3 回答

已采纳
?
Nasei

TA贡献2条经验 获得超0个赞


为啥输出 3 3 4:最开始num1的值是5,判断>3成立,--num1的意思是调用前先自减,所以首先自减变成4,然后调用abc(4),同理adc(4)里num1变成3了,然后调用abc(3),abc(3)里直接输出3 ,回到abc(4),输出3,回到abc(5),输出4。

下面那段代码语法上在我看来没有错,只不过abc(num1--)这样写的话就变成死循环了,num1--的意思是先调用再自减,这样的话就会一直在调用adc(5),一直循环下去

查看完整回答
反对 回复 2016-04-04
  • qq_骑猪看夕阳_3
    qq_骑猪看夕阳_3
    function abc(num1){ document.writeln(num1); if(num1>3){ document.writeln(num1+"-上-"); //递归调用 abc(--num1); document.writeln(num1+"-下-"); } document.writeln(num1+"++"); } 为什么运行流程输出如下结果: 5 5-上- 4 4-上- 3 3++ 3-下- 3++ 4-下- 4++
  • Nasei
    Nasei
    你这段代码和这个问题的一样的呀,一步步走下来就是这样的,我这么和你说吧,首先num1的值是5,所以document.writeln(num1);会输出一个5,然后作判断大于3成立,这时候document.writeln(num1+"-上-");就会输出5-上-,然后走到abc(--num1);这时候num1先自减为4,然后调用abc(4);调用完abc(4)之后,执行document.writeln(num1+"-下-");document.writeln(num1+"++");分别输出4-下- 4++,所以输出其实就是:5 5-上- [abc(4)的输出] 4-下- 4++,abc(4)的输出和abc(5)逻辑上一模一样的,可以类比出来abc(4)的输出:4 4-上- [abc(3)的输出] 3-下- 3++,这样abc(5)的输出就是:5 5-上- 4 4-上- [abc(3)的输出] 3-下- 3++ 4-下- 4++,abc(3)输出就显而易见了,就是3 3++,全部合起来就是5 5-上- 4 4-上- 3 3++ 3-下- 3++ 4-下- 4++
?
深山小童

TA贡献20条经验 获得超10个赞

递归:函数里调用函数本身。先一层层的调用函数,直到停止调用,再一层层的返回执行先前未执行完的内容。

使用递归一定要有条件来阻止程序死循环。

前置递减:--i是语句求值之前i的值先减1,即先执行i= i-1,再(--i)=i;  例如i = 2,那么i = i-1 =1,  (--i) = i = 1。

后置递减:i--是语句求值之后i的值才减1,即先执行(i--)=i,再i= i-1;  例如i = 2,那么(i--) = i = 2, i= i-1 = 1。

所以第二个例子实际上一直在调用abc(5),无法判断停止调用,陷入死循环,至于会不会报错,额,我也才在学,没试过。

查看完整回答
反对 回复 2016-04-12
?
xufeng123456

TA贡献4条经验 获得超2个赞

建议熟悉一下递归函数的原理就会很好理解了;

调用第一个函数abc(5)【注意,函数体中"document.write(4)"暂时不会去执行,但是等if()里昨晚就会来执行】;时,就会进入函数体执行abc(4)【同上面的注意,document,write(3)】--->执行abc(3)【这时3不大于3,就不会进入if(),首次执行document.write(3)】---->回到abc(4)中(由于--num),document(3);在回到adb(5),打印4;最终打印3,3,4

查看完整回答
反对 回复 2016-04-04
  • 3 回答
  • 0 关注
  • 1521 浏览
慕课专栏
更多

添加回答

举报

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