Я думаю, что раньше знал, как это сделать, но, похоже, я забыл.Устранение рекурсии из «Удалить пустые каталоги» Алгоритм
У меня есть рекурсивный алгоритм, чтобы удалить все пустые каталоги в дереве каталогов:
static bool DeleteDirectoriesRecursive(string path)
{
var remove = true;
foreach (var dir in System.IO.Directory.GetDirectories(path))
{
remove &= DeleteDirectoriesRecursive(dir);
}
if (remove &= (System.IO.Directory.GetFiles(path).Length == 0))
System.IO.Directory.Delete(path);
return remove;
}
Я пытаюсь устранить рекурсии из этого алгоритма, не так много, чтобы «исправить» алгоритм (т.е. the similar question не использует переменную remove
, но я хотел бы ее сохранить).
Я начал новую функцию, используя класс Stack<>
, но я не могу придумать хороший способ вернуться к базовому пути и выполнить действия, которые определены подкаталогами. Я думаю, что распутывание нерегулярной рекурсии требует немного больших усилий.
Почему вы хотите заменить один стек (стек IL) другим (вашим)? Что вы можете выиграть от этого? – zmbq
Знания. Никто не сказал, что я сделаю это в производственном кодексе. – palswim
@zmbq - Вот что я думал. Это на самом деле очень хорошее использование рекурсии, поскольку он использует стек вызовов для обхода дерева. Попытка сделать то же самое с вашим собственным стеком просто сделает код намного дольше, труднее понять и не принесет никакой выгоды от производительности. –