我正在尝试用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底部
那么这里发生了什么?我的基本状况有什么问题吗?日志是否显示了堆栈上的内容和从堆栈上取下的内容?我本以为函数会在“它已经结束”时停止,但我不知道为什么没有。
谢谢。
当您到达 5 时,将触发返回语句。这意味着调用第 5 次计数时,它不会再次调用
计数
,然后它不会再次调用控制台.log
。
当它从第5次通话返回时,它会恢复第4次通话。
在第四次调用中,count
是4
(count
是一个局部变量,每次调用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