了解返回反转计数的递归循环

时间:2016-12-28 08:49:34

标签: javascript recursion

inner conditional: 5
inner conditional: 4
inner conditional: 3
inner conditional: 2
inner conditional: 1
0

创建上述输出的功能如下,我完全理解它是如何工作的。

function loop(counter){

    if(counter > 0){
        console.log("inner conditional: " + counter );
        return loop(counter - 1)
    }

    console.log(counter);
    return counter
}

loop(5)

当修改该函数以使内部条件不返回该函数时,console.log将显示以下内容。

inner conditional: 5
inner conditional: 4
inner conditional: 3
inner conditional: 2
inner conditional: 1
0
1
2
3
4
5

以下是负责上述输出的函数。

function loop(counter){

    if(counter > 0){
        console.log("inner conditional: " + counter );
        loop(counter - 1)
    }

    console.log(counter);
    return counter
}

loop(5)

我根本不明白这一点。我只想解释一下创建扩展前向计数的情况。

我使用以下工具来直观显示代码,我仍然没有“得到”它:http://pythontutor.com/javascript.html#mode=display

3 个答案:

答案 0 :(得分:0)

问题是,你再次调用该函数,该函数以一个计数器结束< 1,但它并没有结束实际的功能本身,而是稍后用计数器输出。

如果缩进显示相同的功能,则为相同级别。

inner conditional: 5
    inner conditional: 4
        inner conditional: 3
            inner conditional: 2
                inner conditional: 1
                    0
                1
            2
        3
    4
5

答案 1 :(得分:0)

从循环函数的第一个实例内部,您使用return调用循环函数,该函数会在“return”执行后阻止其余语句。 但是,在第二个实例中,在没有返回的情况下调用循环函数,因此也会执行if条件之外的console.log并且您同时看到console.log输出。

答案 2 :(得分:0)

我一直在寻找的答案是,1-5的数量正从堆栈顶部拉出。

我发现了一个很棒的YouTube视频,通过可视化解释了这一点:

https://www.youtube.com/watch?v=s8JpA5MjYac