js递归打印乘法表,为什么上面执行完打印第一行后,然后执行下面循环的时候每次num会自增呢

function nine(num){
    if(num==1){
        console.log('1*1=1');
    }else{
        nine(num-1);
        for(var i=1,str='';i<=num;i++){
            str+= i + '*' + num + '=' + i*num + ' ';
        }
        console.log(str);
    }
}
nine(9);

 

这个不是自增,而是你调用了nine(num-1),相当于是一个递归调用,然后调用了9次,每次num的值都不一样。如果不明白,就按照函数的执行流程走一遍就懂了——第一次,num=9,然后nine(8),接着nine(7).......知道nine(1),打印第一行,再向上执行for循环的函数,结果就出来了。

nine(9)  不等于1   所以走else,然后会先调用nine(8)  然后再执行输出nine(9)的字符串,nine(8) 也是同理会先执行nine(7)再执行输出

所以显示是反过来的    先显示nine(1) 中的字符串  然后 2  然后 3 ....一直到9

把调用写在循环后

function nine(num){
    if(num==1){
        console.log('1*1=1');
    }else{
        for(var i=1,str='';i<=num;i++){
            str+= i + '*' + num + '=' + i*num + ' ';
        }
        nine(num-1);
        console.log(str);
    }
}
nine(9);