根据OP的要求,我会插手(不要装傻,希望:P)
我认为我们都同意递归只是一种更优雅的编码方式。如果做得好,它可以使代码更易于维护,恕我直言,减少0.0001ms同样重要(如果不是更多的话)。
至于关于JS不执行尾部调用优化的说法,这已经不完全正确了,使用ECMA5的严格模式可以启用TCO。不久前我对此不太满意,但是至少我现在知道为什么arguments.callee
在严格模式下抛出错误。我知道上面的链接链接到一个错误报告,但是该错误设置为WONTFIX。此外,即将发布标准的TCO:ECMA6(2013年12月)。
本能地坚持JS的功能本质,我想说递归是99.99%的时间更有效的编码风格。但是,弗洛里安·玛格恩(Florian Margaine)指出,瓶颈可能在其他地方发现。如果要操作DOM,则最好将精力集中在编写尽可能可维护的代码上。DOM API是什么:慢。
我认为几乎不可能就哪个是更快的选项提供确切的答案。最近,我看到的许多jspref都表明Chrome的V8引擎在某些任务上可笑地快,在FF的SpiderMonkey上运行速度慢了4倍,反之亦然。现代JS引擎可以进行各种技巧来优化您的代码。我不是专家,但是我确实认为例如V8已针对闭包(和递归)进行了高度优化,而MS的JScript引擎却没有。当涉及DOM时,SpiderMonkey的性能通常会更好。
简而言之:我想说哪种技术会更出色,就像在JS中一样,几乎无法预测。