Zgodnie z prośbą OP włożę się (bez robienia z siebie głupca, mam nadzieję: P)
Myślę, że wszyscy się zgodziliśmy, że rekurencja jest po prostu bardziej eleganckim sposobem kodowania. Jeśli zostanie to zrobione dobrze, może sprawić, że kod będzie łatwiejszy w utrzymaniu, co jest równie ważne (jeśli nie więcej) IMHO, że goli 0,0001 ms.
Jeśli chodzi o argument, że JS nie wykonuje optymalizacji wywołania ogona: nie jest to już do końca prawdą, użycie trybu ścisłego ECMA5 umożliwia TCO. To było coś, z czego nie byłem zbyt zadowolony, ale przynajmniej teraz wiem, dlaczego arguments.callee
rzuca błędy w trybie ścisłym. Wiem, że powyższy link prowadzi do raportu o błędzie, ale błąd jest ustawiony na WONTFIX. Ponadto nadchodzi standardowy TCO: ECMA6 (grudzień 2013 r.).
Instynktownie i trzymając się funkcjonalnej natury JS, powiedziałbym, że rekurencja jest bardziej wydajnym stylem kodowania 99,99% czasu. Jednak Florian Margaine ma rację, gdy mówi, że wąskie gardło można znaleźć gdzie indziej. Jeśli manipulujesz DOM, prawdopodobnie najlepiej skupiasz się na pisaniu kodu tak, aby był możliwie jak najłatwiejszy w utrzymaniu. DOM API jest tym, czym jest: wolno.
Myślę, że prawie niemożliwe jest udzielenie ostatecznej odpowiedzi na pytanie, która opcja jest szybsza. Ostatnio wiele jsprefów, które widziałem, pokazuje, że silnik Chrome V8 jest absurdalnie szybki w niektórych zadaniach, które działają 4x wolniej na SpiderMonkey w FF i odwrotnie. Nowoczesne silniki JS mają różne sztuczki, aby zoptymalizować kod. Nie jestem ekspertem, ale wydaje mi się, że na przykład V8 jest wysoce zoptymalizowany do zamykania (i rekurencji), podczas gdy silnik JScript MS nie. SpiderMonkey często działa lepiej, gdy DOM jest zaangażowany ...
W skrócie: Powiedziałbym, która technika będzie bardziej wydajna, jak zwykle w JS, prawie niemożliwe do przewidzenia.