JavaScript-递归


递归

函数直接或间接调用自身

避免无限递归,无限递归会导致执行栈溢出。

对比死循环

  • 死循环不会报错,也不会导致栈溢出
  • 无限递归会导致栈溢出

执行栈

任何代码的执行都必须有一个执行环境,执行环境为代码的执行提供支持

执行环境是放到执行栈中的。

每个函数的调用,都需要创建一个函数的执行环境,函数调用结束,执行环境销毁。

执行栈有相对固定的大小,如果执行环境太多,执行栈无法容纳,会报错

尾递归

如果一个函数最后一条语句是调用函数,并且调用函数不是表达式的一部分,则该语句称为尾调用,如果尾调用是调用自身函数,则称为尾递归。

某些语言或执行环境会对尾调用进行优化,它们会理解销毁当前函数,避免执行栈空间被占用。

在浏览器执行环境中,尾调用没有优化。但在nodejs环境中有优化。


文章作者: overwhat
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 overwhat !
评论
  目录