Conforme solicitação do OP, eu irei entrar em contato (sem me fazer de bobo, espero: P)
Acho que todos concordamos que a recursão é apenas uma maneira mais elegante de codificar. Se bem feito, pode resultar em código mais sustentável, o que é IMHO tão importante (se não mais) que reduzir 0,0001ms.
No que diz respeito ao argumento de que o JS não executa a otimização de chamada de cauda: isso não é mais verdade, o uso do modo estrito do ECMA5 permite o TCO. Era algo que eu não estava muito feliz há um tempo, mas pelo menos agora eu sei por que arguments.callee
lança erros no modo estrito. Conheço o link acima para um relatório de bug, mas o bug está definido como WONTFIX. Além disso, o TCO padrão está chegando: ECMA6 (dezembro de 2013).
Instintivamente, e mantendo a natureza funcional do JS, eu diria que a recursão é o estilo de codificação mais eficiente em 99,99% do tempo. No entanto, Florian Margaine tem razão quando diz que é provável que o gargalo seja encontrado em outro lugar. Se você está manipulando o DOM, provavelmente está mais concentrado em escrever seu código da maneira mais sustentável possível. A API do DOM é o que é: lenta.
Eu acho que é quase impossível oferecer uma resposta definitiva sobre qual é a opção mais rápida. Ultimamente, muitos jspref que eu vi mostram que o mecanismo V8 do Chrome é ridiculamente rápido em algumas tarefas, que são 4x mais lentas no SpiderMonkey da FF e vice-versa. Os mecanismos JS modernos têm todos os tipos de truques nas mangas para otimizar seu código. Não sou especialista, mas sinto que a V8, por exemplo, é altamente otimizada para fechamentos (e recursão), enquanto o mecanismo JScript da MS não é. O SpiderMonkey costuma ter um desempenho melhor quando o DOM está envolvido ...
Em resumo: eu diria que técnica terá melhor desempenho, como sempre em JS, é quase impossível de prever.