В соответствии с запросом ОП я скину (не дурачу себя, надеюсь: P)
Я думаю, что мы все согласны с тем, что рекурсия - это просто более элегантный способ кодирования. Если все сделано правильно, это может сделать код более легким для сопровождения, что, по-моему, так же важно (если не больше), как снижение затрат на 0,0001 мс.
Что касается аргумента, что JS не выполняет оптимизацию Tail-call: это уже не совсем верно, использование строгого режима ECMA5 позволяет TCO. Это было то, что я не был слишком счастлив некоторое время назад, но, по крайней мере, теперь я знаю, почему arguments.callee
выдает ошибки в строгом режиме. Я знаю, что ссылка выше ссылается на отчет об ошибке, но ошибка установлена на WONTFIX. Кроме того, ожидается стандартная TCO: ECMA6 (декабрь 2013 г.).
Инстинктивно, придерживаясь функциональной природы JS, я бы сказал, что рекурсия - более эффективный стиль кодирования в 99,99% случаев. Тем не менее, у Флориана Маргэйна есть пункт, когда он говорит, что узкое место может быть найдено в другом месте. Если вы манипулируете DOM, вам, вероятно, лучше всего сосредоточиться на написании своего кода, насколько это возможно. DOM API - это то, что он есть: медленно.
Я думаю, что невозможно дать однозначный ответ, какой вариант является более быстрым. В последнее время многие jspref, которые я видел, показывают, что движок Chrome V8 смехотворно быстр в некоторых задачах, которые работают в 4 раза медленнее на Fider SpiderMonkey и наоборот. Современные движки JS имеют всевозможные хитрости для оптимизации вашего кода. Я не эксперт, но я чувствую, что V8, например, высоко оптимизирован для замыканий (и рекурсии), тогда как движок MS JScript - нет. SpiderMonkey часто работает лучше, когда DOM задействован ...
Вкратце: я бы сказал, какая техника будет более эффективной, как всегда в JS, почти невозможно предсказать.