我想我以前知道如何做到这一点,但似乎我已经忘记了。消除递归删除空目录算法
我有一个递归算法删除所有空目录的目录树:
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 2012-03-02 19:38:50
知识。没有人说我要在生产代码中这样做。 – palswim 2012-03-02 19:40:07
@zmbq - 这就是我的想法。这实际上是递归的一个很好的用法,因为它使用调用堆栈来爬取树。试图用自己的堆栈做同样的事情只会使代码更长,更难以理解,并且不会提供任何性能优势。 – 2012-03-02 19:44:38