Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 理解返回倒计数的递归循环_Javascript_Recursion - Fatal编程技术网

Javascript 理解返回倒计数的递归循环

Javascript 理解返回倒计数的递归循环,javascript,recursion,Javascript,Recursion,下面是创建上述输出的函数,我完全理解它的工作原理 inner conditional: 5 inner conditional: 4 inner conditional: 3 inner conditional: 2 inner conditional: 1 0 当修改函数以使内部条件不返回函数时,console.log将显示以下内容 function loop(counter){ if(counter > 0){ console.log("inner con

下面是创建上述输出的函数,我完全理解它的工作原理

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

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

function loop(counter){

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

    console.log(counter);
    return counter
}

loop(5)
下面是负责上述输出的功能

inner conditional: 5
inner conditional: 4
inner conditional: 3
inner conditional: 2
inner conditional: 1
0
1
2
3
4
5
我完全不明白这一点。我想简单地解释一下,如何创建扩展远期计数


我使用了以下工具来可视化代码的单步执行,但我仍然没有“理解”它:

问题是,您再次调用函数,函数以计数器<1结束,但它没有结束实际函数本身,并在以后使用计数器进行输出

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

function loop(counter){

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

    console.log(counter);
    return counter
}

loop(5)

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

我想要的答案是1-5个计数被从堆栈的顶部拉下来

我在youtube上找到了一个很棒的视频,用可视化的方式解释了这一点:


简单地说,删除
返回
,当它结束对
循环(计数器-1)
的调用时,它将继续到最后一个
控制台.log
,即使计数器是
>0
…您可以使用
其他控制台.log(计数器)来进行转换循环(计数器-1)
,并在调用后充当
控制台.log
,这意味着它将
log
从最内部(最后一次)调用开始,并在内部调用完成后从最旧的函数调用开始打印…很抱歉不准确,希望它能帮助您在计数器大于0的第一个代码段中返回,然后再到达
控制台.log(计数器)指令。但是在第二个代码段中,
console.log(计数器)前面没有返回指令,使其每次返回前都到达console.log。
inner conditional: 5
    inner conditional: 4
        inner conditional: 3
            inner conditional: 2
                inner conditional: 1
                    0
                1
            2
        3
    4
5