Какие техники ты можешь использовать, чтобы предотвратить ошибки stack overflow при реализации рекурсивных функций в JavaScript, и как паттерн trampoline с `setTimeout` помогает смягчить эту проблему? — ДейлиПреп