我想我以前知道如何做到這一點,但似乎我已經忘記了。消除遞歸刪除空目錄算法
我有一個遞歸算法刪除所有空目錄的目錄樹:
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