这个递归函数在做什么?

时间:2015-09-18 15:23:58

标签: javascript logging recursion

我试图在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;而且我不确定它为什么不这样做。

感谢。

2 个答案:

答案 0 :(得分:2)

当你到达5时,返回语句将触发。这意味着,第5次count被称为赢了再次呼叫console.log,然后又不会再次呼叫count。< / p>

当它从第5个呼叫返回时,它将恢复第4个呼叫。

在第4个电话中,4countcount是一个局部变量,每次调用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