【发布时间】:2011-08-18 02:19:44
【问题描述】:
我知道在 JavaScript 中对函数进行递归调用时应小心行事,因为第二次调用可能会慢 10 倍。
有一个重要问题:在大多数 JavaScript 实现中,第二个版本比第一个版本慢大约 10 倍。在 JavaScript 中,运行一个简单的循环比多次调用一个函数要便宜很多。
John Resig 甚至在 this 帖子中说这是一个问题。
我的问题是:为什么使用递归效率如此之低?它只是特定引擎的构建方式吗?我们会在 JavaScript 中看到不是这种情况的时间吗?
【问题讨论】:
-
我猜这是一个范围问题:P 好问题,我很好奇他们的答案是什么!
-
函数调用开销简直比循环控制要大;在几乎任何编程语言中都是如此。调用函数时还有很多工作要做:分配和初始化新作用域、保存返回地址、编组参数等。请注意,JavaScript 解释器的速度越来越快,所以性能提示在 3一年前的博文(或书籍)应该受到质疑。
-
“因为你的第二次通话可能会慢 10 倍” 这不是文字所说的。它说第二个版本的代码慢了 10 倍。
-
This 很好地展示了递归有多慢。请注意,不同的不仅仅是函数调用,因为两个测试的调用次数相同
标签: javascript recursion