递归如何在调用堆栈的幕后工作?

时间:2016-08-14 21:29:18

标签: recursion

我理解递归的逻辑,一个函数调用一个带有基本情况的函数然后终止,我这里有一个代码记录一个简单的递归,我得不到的是它开始记录到达的条件,满足条件:0?

function factorialize(num) {

    if(num === 0){
        console.log('condition met: '+num);
        return 1;
    }

    var x = factorialize(num-1); // iterate
    var toReturn = num*x;

    console.log("Current call: num = " + num
            + " x = " + x
            + "\n"
            + "Returning " + toReturn
            );

    return toReturn;

}

factorialize(5);

我期待这段代码首先记录输出,最后达到条件?

输出和demo output

2 个答案:

答案 0 :(得分:1)

在递归中,首先你去"然后你来#34; out"。

递归factorialize电话之前的任何事情都在路上"在"。

任何事情都在路上" out"。

由于您的第二个console.log语句在递归调用之后出现,因此它会在路上执行" out"。

您的第一个console.log语句位于if语句中。 if语句出现在递归调用之前,所以它在路上的每个级别进行测试"在"中,但它只在到达console.log语句>井底。

答案 1 :(得分:0)

作为already pointed out,它是

因为factorialize(5)调用factorialize(4),它调用factorialize(3),它调用factorialize(2),调用factorialize(1),调用factorialize(0)

然后发生所有日志。