3 回答
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),一直循环下去
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),无法判断停止调用,陷入死循环,至于会不会报错,额,我也才在学,没试过。
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
添加回答
举报