function startRecursion() {
//всякий код
//можно по ифу завершить рекрусию сделав перед следующим таймером return;
setTimeout(startRecursion, 1000);
};
Если это нужно для анимации, то используйте requestAnimationFrame() – событие вызывается каждый раз, как браузер собирается обновить картинку. Внутри проверяйте, сколько фактически времени прошло.