Лучший ответ для такой ситуации:
Не используйте рекурсивные алгоритмы, если ваш алгоритм не имеет рекурсивной структуры. Например, если вы анализируете файловую систему и хотите сканировать конкретный каталог, вам нужно сделать что-то вроде:
void ScanDirectory(Directory)
{
// Handle Files
if (currfile.directory)
ScanDirectory(currfile)
}
Это имеет смысл, потому что это намного проще, чем делать это итеративно. Но в противном случае, когда вы просто повторяете действие снова и снова, делать его рекурсию совершенно не нужно, что приведет к неэффективности кода и в конечном итоге к переполнению стека.