Відповідно до запиту ОП, я зіткнуся (не зроблячи дурня, сподіваюся: P)
Я думаю, що ми всі погодилися, що рекурсія - це просто більш елегантний спосіб кодування. Якщо все зроблено добре, це може зробити більш реконструйованим кодом, що IMHO так само важливо (якщо не більше), що гоління 0,0001ms.
Що стосується аргументу, що JS не проводить оптимізацію Tail-call: це вже не зовсім вірно, використання суворого режиму ECMA5 дозволяє TCO. Це було те, що я не надто тішився деякий час назад, але, принаймні, тепер я знаю, чому arguments.callee
кидає помилки в суворому режимі. Я знаю посилання вище посилання на звіт про помилку, але помилка встановлена на WONTFIX. Крім того, стандартний TCO виходить: ECMA6 (грудень 2013).
Інстинктивно, і дотримуючись функціональної природи JS, я б сказав, що рекурсія - це більш ефективний стиль кодування 99,99% часу. Однак у Флоріана Маргаїна є момент, коли він каже, що вузьке місце, ймовірно, знайдеться в іншому місці. Якщо ви маніпулюєте DOM, ви, мабуть, найкраще зосередитесь на тому, щоб написати свій код якомога більш доступним. API DOM - це те, що це: повільно.
Я думаю, що неможливо запропонувати остаточну відповідь щодо швидшого варіанту. Останнім часом багато jspref, які я бачив, показують, що V8 двигун Chrome смішно швидкий при деяких завданнях, які працюють на 4 рази повільніше на SpiderMonkey FF і навпаки. Сучасні двигуни JS мають різноманітні хитрощі, щоб оптимізувати ваш код. Я не експерт, але я вважаю, що, наприклад, V8 дуже оптимізований для закриття (та рекурсії), тоді як JScript двигуна MS не є. SpiderMonkey часто працює краще, коли DOM залучається ...
Коротше кажучи: я б сказав, яка техніка буде більш ефективною, як завжди в JS, майже неможливо передбачити.