Ваше решение будет повторяться и, в конечном итоге, уничтожит стек - но у вас будет достаточно времени - в зависимости от браузера - пока оно не сработает Для быстрой демонстрации это хорошо, но для готового кода вы захотите использовать нерекурсивный подход, такой как:
function pulse(){
$("#id").fadeIn(500).fadeOut(500);
}
setInterval(pulse, 1000);
Есть много способов избавиться от этого, но вы должны получить его там.