我编写了一个用于搜索特定文件的代码,用户在其中输入起始路径和文件名,然后程序在文件存在时打印其详细信息,否则打印未找到。
正如我所怀疑的那样,当层次结构树太大时,使用递归会使代码崩溃,我尝试了 400 个目录但它失败了,所以我猜想在50
一个内部到另一个文件夹之类的东西之后,递归的开销使代码崩溃。
有什么建议可以解决这个问题吗?基本上代码对于低级树层次结构是可以的,但我需要为健康的树设计它(500-600 个文件夹,一个在另一个文件夹中,一个文件存储在最后一个文件夹中),谢谢
您可以删除递归(即转换为迭代解决方案),方法是存储您看到的目录(而不是立即处理它们),然后在稍后的迭代中返回它们。但是,您可能无法获得完全相同的输出(事物的排序可能不同)。
此方法的工作方式是拥有一个要处理的目录列表,然后您浏览此列表(随时向其中添加任何子目录)。
在伪代码/Python 中:
def print_dirs(path, recursive, filename):
dir_stack = empty stack
dir_stack.push(path)
while dir_stack is not empty:
dir = dir_stack.pop() # returns the head element (and removes it)
for file in children(dir):
# ...do stuff with names...
if recursive and file is a directory:
dir_stack.push(file) # process the directory later
堆栈可以很容易地实现为单链表。请注意,如果path
不是目录,则需要进行特殊处理,并且这不是递归的。