JavaScript 中的递归函数调用

2023-12-24

我知道在 JavaScript 中对函数进行递归调用时应该小心谨慎,因为第二次调用可能会慢 10 倍。

雄辩的 JavaScript http://eloquentjavascript.net/chapter3.html states:

有一个重要的问题:在大多数 JavaScript 实现中,第二个版本比第一个版本慢大约 10 倍。在 JavaScript 中,运行一个简单的循环比多次调用一个函数要便宜得多。

约翰·雷西格甚至说这是一个问题this http://ejohn.org/blog/javascript-performance-rundown/ post.

我的问题是:为什么使用递归效率如此低下?这只是特定引擎的构建方式吗?我们会在 JavaScript 中看到不是这样的时代吗?


由于更改堆栈和设置新上下文等的所有开销,函数调用比简单循环更昂贵。为了使递归非常高效,语言必须支持某种形式的尾部调用消除,这基本上意味着将某些类型的递归函数转换为循环。像 OCaml、Haskell 和 Scheme 这样的函数式语言可以做到这一点,但据我所知,没有 JavaScript 实现这样做(除非它们都这样做,否则它只会有一点用处,所以也许我们遇到了哲学家就餐的问题)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript 中的递归函数调用 的相关文章