1

我知道以前有人问过这个问题,但我有一个我正在考虑的具体例子。目前我有一段代码,虽然是伪代码,因为我不在工作终端:

void setTree(string dir) {
    add dir to dirlist
    create dir object //contains list of subdirs and files
    for subdir in dir.subs do
        setTree(subdir)
    end
}

这是否可能与 for 循环有关,因为您在编译时无法知道编译时会有多少子目录。伪代码很好或一些解释或算法。我真的不需要任何东西,因为我最喜欢我的递归解决方案,但我真的很想知道它是否可能。以及它背后的理论。

4

2 回答 2

2

对于理论,请参见此处投票最多的答案:每个递归都可以转换为迭代吗?

几乎:

void setTree(string dir) {
   add dir to dirlist
   while (dirlist not empty) {
   d = dirlist.pop()
   create d object
   for subdir in d.subs do
      append subdir to dirlist
   end
   }
}

我试图遵循您的伪代码的奇怪语法混淆,希望它仍然可读。

于 2013-08-04T16:38:14.703 回答
1

这取决于 dir 类的设计。如果子目录保存在数组或列表中,则可以将大小值用作 for 循环的最大值。该值将在运行时定义。如果子目录被保存,否则您可能必须使用while循环。

希望对 ChronosMOT 有所帮助

于 2013-08-04T16:46:10.250 回答