我试图在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顶部 2顶部 3顶部 4顶部 5顶部 它已经结束了 4底部 3底部 2底部 1个底部
那么这里发生了什么?我的基础条件有问题吗?日志是否显示了什么?并且从堆栈中取出了什么?我原以为这个功能会停止在"它已经结束了#34;而且我不确定它为什么不这样做。
感谢。
答案 0 :(得分:2)
当你到达5时,返回语句将触发。这意味着,第5次count
被称为赢了再次呼叫console.log
,然后又不会再次呼叫count
。< / p>
当它从第5个呼叫返回时,它将恢复第4个呼叫。
在第4个电话中,4
为count
(count
是一个局部变量,每次调用console.log
时都有一个不同的变量)因此它会运行到最后一个函数中的undefined
语句到达函数的末尾并返回startDate
。 第三次调用然后恢复,依此类推。
答案 1 :(得分:0)
重点是,如果之前没有终止,你的功能会打印到顶部和底部。调用是在顶部和底部以及返回之间进行的。
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