Если ваш код использует хвостовую рекурсию (то есть функция возвращает результат каждого рекурсивного вызова напрямую, без какой-либо другой обработки), то можно обязательно переписать функцию без стека:
function dosomething(a,b,c,d)
{
// manipulate a,b,c,d
if (condition)
return dosomething(a,b,c,d)
else
return something;
}
Into:
function dosomething(a,b,c,d)
{
while (true)
{
// manipulate a,b,c,d
if (condition) continue;
else return something;
}
}
Без хвостовой рекурсии единственным решением является использование стека (или аналогичного промежуточного хранилища).