小白问题,这个阶层递归是怎么理解的,比较简单,但是我就是绕不出来

function box(num){
    if(num<=1){
        return 1;
    }else{
        return num*box(num-1);
    }
}

alert(box(4));  

得到24是为什么?按我的理解,当num=4时,应该返回1次4*3=12就结束了呀?

回复
阅读 2k
4 个回答

你return num*box(num-1);时候又调用了box()方法~

不对不对,你仔细想想,你传入4的时候,return 4 box(3),在此时会执行box(3),在box(3)里面,又会返回,3 box(2),此时又会执行box(2),box(2)里面会执行box(1),此时box(1)返回1,然后继续前面的运算,所以是,1234 = 24咯、

4x3x2x1=24

第一次进入

4 x box(3)
第二次进入
    3 x box(2)
    第三次进入
        2 x box(1)
        第四次进入
            1 
宣传栏