提问者:小点点

这个递归函数在做什么?


我正在尝试用Javascript学习递归,并编写了这个来跟踪一个简单的递归函数。

function count(num){

console.log(num + " top");
if (num===5)
return console.log("It has ended.");
count(num+1);
console.log(num + " bottom");
}

count(1);

这是输出:

1 top
2 top
3 top
4 top
5 top
已结束。
4底部
3底部
2底部
1底部

那么这里发生了什么?我的基本状况有什么问题吗?日志是否显示了堆栈上的内容和从堆栈上取下的内容?我本以为函数会在“它已经结束”时停止,但我不知道为什么没有。

谢谢。


共2个答案

匿名用户

当您到达 5 时,将触发返回语句。这意味着调用第 5 次计数时,它不会再次调用计数,然后它不会再次调用控制台.log

当它从第5次通话返回时,它会恢复第4次通话。

在第四次调用中,count4count是一个局部变量,每次调用count都有一个不同的变量),因此它在函数中运行最后的console.log语句,到达函数的末尾并返回unde。第三次调用然后继续,依此类推。

匿名用户

关键是,你的funcion打印顶部和底部,如果之前没有终止。调用是在顶部和底部以及返回之间进行的。

first   second  third   4th     5h call of function
1 top
        2 top
                3 top
                        4 top
                                5 top
                                It has ended.
                        4 bottom
                3 bottom
        2 bottom
1 bottom