【问题标题】:Loop through folders without recursion循环遍历文件夹而不递归
【发布时间】:2011-07-03 12:20:33
【问题描述】:

我一直在寻找一种算法,所以操作系统没有问题,如何在不使用递归的情况下遍历文件夹。

递归不是答案,因为递归不能到达“无穷大”甚至更远,而“while 循环”可以到达那里。

编程语言无关紧要。

【问题讨论】:

  • 您要解决什么问题?为什么递归不是答案?
  • 我在找算法,所以操作系统没有问题。递归不是答案,因为递归不能到达“无穷大”,而“while 循环”可以到达。

标签: language-agnostic recursion


【解决方案1】:

您可以使用stack 数据结构进行depth-first 遍历。以下是 C# 中的一些示例代码:

    var stack = new Stack<string>();

    stack.Push(@"C:\");

    while (stack.Count > 0)
    {
        var currentDirectory = stack.Pop();
        Console.WriteLine("Visiting: " + currentDirectory);

        foreach (var childDirectory in Directory.GetDirectories(currentDirectory))
        {
            stack.Push(childDirectory);
        }
    }

【讨论】:

  • 当然,这只是手动复制编译器会为您完成的工作,如果您首先使用递归的话。