C# 递归算法

C# 递归算法,c#,asp.net,file,recursion,C#,Asp.net,File,Recursion,嘿,我试图创建一个名称列表,扩展名包括目录中的所有文件,以及所有文件中的所有文件,但我需要使用递归算法。我不确定我是否在正确的轨道上!!!对C非常陌生,我通常用队列做这类事情: // Make sure rootDir exists first... var files = new List<string>(); var dirs = new Queue<string>(); dirs.Enqueue(rootDir); while(dirs.Count > 0

嘿,我试图创建一个名称列表,扩展名包括目录中的所有文件,以及所有文件中的所有文件,但我需要使用递归算法。我不确定我是否在正确的轨道上!!!对C非常陌生,我通常用队列做这类事情:

// Make sure rootDir exists first...

var files = new List<string>();
var dirs = new Queue<string>();
dirs.Enqueue(rootDir);

while(dirs.Count > 0 ) {

  var dir = dirs.Dequeue();

  foreach( var fileName in Directory.GetFiles(dir) ) {
    files.Add(fileName);
  }

  foreach( var subDir in Directory.GetDirectories(dir) ) {
    dirs.Enqueue(subDir);
  }
}

// Now populate your list with the files collection.

我通常通过排队来做这类事情:

// Make sure rootDir exists first...

var files = new List<string>();
var dirs = new Queue<string>();
dirs.Enqueue(rootDir);

while(dirs.Count > 0 ) {

  var dir = dirs.Dequeue();

  foreach( var fileName in Directory.GetFiles(dir) ) {
    files.Add(fileName);
  }

  foreach( var subDir in Directory.GetDirectories(dir) ) {
    dirs.Enqueue(subDir);
  }
}

// Now populate your list with the files collection.

1为什么需要递归算法?这可以非递归地实现。2递归意味着你的方法以某种方式调用自己。我的软件工程朋友说使用递归算法会更容易。FileInfo[]files=pi.GetFiles*,SearchOption.AllDirectory;?简单和递归一起在一句话^_^这似乎是一个家庭作业。看看这里的例子:1为什么需要递归算法?这可以非递归地实现。2递归意味着你的方法以某种方式调用自己。我的软件工程朋友说使用递归算法会更容易。FileInfo[]files=pi.GetFiles*,SearchOption.AllDirectory;?简单和递归一起在一句话^_^这似乎是一个家庭作业。检查一下这里的例子:+1,不要在堆栈中乱放无法内联的无用函数调用+1用于此模式。尽管我仍然更喜欢递归,因为我认为它更容易理解,但C->CLR编译器中缺少尾部的遗憾。然而,我更喜欢使用yield而不是List。是的,我的实际代码是作为迭代器块实现的,我用它遍历大约1000000个xml文件的目录结构…+1。这是教育性的。另外,简单地使用将用更少的代码实现同样的效果,包括迭代器版本4.0+。实际上,我想,如果我忽略Alexei的话,我会更深入地思考这个示例。我会把这个问题分成两个函数。递归获取所有目录并枚举目录中的每个文件。切换到使用可枚举的GetFile/GetDirectory。原因是,当使用并发时,您可以更快地获得第一个结果。+1用于避免堆栈中出现无法内联的无用函数调用+1用于此模式。尽管我仍然更喜欢递归,因为我认为它更容易理解,但C->CLR编译器中缺少尾部的遗憾。然而,我更喜欢使用yield而不是List。是的,我的实际代码是作为迭代器块实现的,我用它遍历大约1000000个xml文件的目录结构…+1。这是教育性的。另外,简单地使用将用更少的代码实现同样的效果,包括迭代器版本4.0+。实际上,我想,如果我忽略Alexei的话,我会更深入地思考这个示例。我会把这个问题分成两个函数。递归获取所有目录并枚举目录中的每个文件。切换到使用可枚举的GetFile/GetDirectory。原因是,在使用并发时,您可以更快地获得第一个结果。