Hola:
Para que se tratase de recursión recurrente debería de hacer una llamada a recurrente o setTimeout a setTimeout, pero se trata de algo mucho más complejo, porque los procesos recursivos suelen "apilar" el estado del propio método recursivo, antes de la recursión, desapilándolas luego, pero estas llamadas son independientes... un par de casos de estudio fáciles son los factoriales y los fibonacci (las torres de hanoi son un poco más complejillas...)
Con los sistemas de temporización, se pueden cancelar/detener siempre que sean asignados a una variable y luego poner clearTimeout/clearInterval(variable)
Un ejemplo con Interval...
var contador = 0;
function segundero() {
if (contador++ == 10) clearInterval(temporizador);
// el resto del código...
}
var temporizador = setInterval("segundero()", 1000);
Sobre el tema de la memoria, es preferible no abusar de estos métodos, aunque creo que para tus objetivos no deberías preocuparte...
Por cierto, empecé a escribir un artículo sobre este tema, puedes verlo aquí:
Controlar los tiempos
Saludos