我知道这个问题之前有过一些问题,但我有一个我想到的具体例子。 目前我有一段代码,虽然是伪代码,因为我不在我的工作终端:
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循环有关,因为在编译时你无法知道编译时会有多少个子目录。 伪代码很好或者有些解释或算法。我真的不需要任何东西,因为我最喜欢我的递归解决方案,但我真的想知道它是否可行。以及它背后的理论。
答案 0 :(得分:2)
对于理论,请参见最高投票答案:Can every recursion be converted into iteration?
实际上:
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
}
}
我试图跟随你的伪代码的奇怪语法混淆,希望它仍然可读。
答案 1 :(得分:1)
这取决于dir类的设计。如果子目录保存在数组或列表中,则可以使用大小值作为for循环的最大值。该值将在运行时定义。如果保存了子目录,否则你必须使用while循环。
希望有所帮助 ChronosMOT