Auf Wunsch des OP mische ich mich ein (ohne mich lächerlich zu machen, hoffentlich: P)
Ich denke, wir sind uns alle einig, dass Rekursion nur eine elegantere Art der Codierung ist. Wenn es gut gemacht wird, kann es zu einem wartbareren Code führen, was meiner Meinung nach genauso wichtig ist (wenn nicht sogar mehr), als 0,0001 ms zu sparen.
In Bezug auf das Argument, dass JS keine Tail-Call-Optimierung durchführt, trifft dies nicht mehr zu. Die Verwendung des Strict-Modus von ECMA5 ermöglicht TCO. Es war etwas, worüber ich mich vor einiger Zeit nicht besonders gefreut habe, aber jetzt weiß ich zumindest, warum arguments.callee
Fehler im strengen Modus ausgelöst werden. Ich kenne den obigen Link zu einem Fehlerbericht, aber der Fehler ist auf WONTFIX gesetzt. Außerdem kommt die Standard-TCO: ECMA6 (Dezember 2013).
Instinktiv und unter Beibehaltung der Funktionalität von JS würde ich sagen, dass Rekursion in 99,99% der Fälle der effizientere Codierungsstil ist. Florian Margaine hat jedoch einen Punkt, an dem er sagt, dass der Engpass wahrscheinlich woanders zu finden ist. Wenn Sie das DOM manipulieren, konzentrieren Sie sich wahrscheinlich am besten darauf, Ihren Code so wartbar wie möglich zu machen. Die DOM-API ist wie sie ist: langsam.
Ich denke, es ist so gut wie unmöglich, eine endgültige Antwort darauf zu geben, welche Option schneller ist. In letzter Zeit haben viele jsprefs gezeigt, dass die V8-Engine von Chrome bei einigen Aufgaben, die auf FFs SpiderMonkey 4x langsamer laufen, lächerlich schnell ist und umgekehrt. Moderne JS-Engines haben alle möglichen Tricks parat, um Ihren Code zu optimieren. Ich bin kein Experte, aber ich bin der Meinung, dass beispielsweise V8 in hohem Maße für das Schließen (und die Rekursion) optimiert ist, wohingegen die JScript-Engine von MS dies nicht ist. SpiderMonkey bietet häufig eine bessere Leistung, wenn das DOM beteiligt ist ...
Kurz gesagt: Ich würde sagen, welche Technik leistungsstärker sein wird, ist wie immer in JS nahezu unmöglich vorherzusagen.