一道关于递归的面试题

function abc(num){
  if(num>3){
    abc(--num);
  }
console.log(num)
}
abc(5)
 
先公布答案吧,输出结果是3,3,4
刚开始我也很诧异,后面终于想明白了,我把个人一些思路分享出来;
这道题主要考了你们对递归的理解,递归实际上是有去有回的,进去了还要一步一步出来,最终完成递归,
咋们来分析下
第一步,当咱们调用abc(5),建立了第一个abc的执行上下文,进入判断(num>3)条件成立,
第二步,调用了abc(--num),建立第二个abc的执行上下文,这时候num=4,进入(num>3)条件成立,
第三步,调用abc(--num),建立第三个abc的执行上下文,这时候num=3,进入(num>3)条件不成立,直接执行下一行代码输出num的值为3,代码结束,销毁这个上下文,注意了这个时候递完成了,就要归了,
 
回到第二步abc的上下文,此时的num已经执行了--num,因此等于3,那么执行输出语句固然是3了,代码执行完毕,销毁第二个abc上下文;
回到第一步abc的上下文,此时同理--num的缘由,num=4,输出结果为4,代码执行完毕,销毁上下文.
递归函数到这里就算执行完了;
相关文章
相关标签/搜索