gpt4 book ai didi

java - 在调用之间保留递归函数的堆栈位置

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:05:56 26 4
gpt4 key购买 nike

这个问题很笼统,但我觉得最好用一个具体的例子来解释。假设我有一个包含许多嵌套子目录的目录,并且在其中一些子目录中有以“.txt”结尾的文本文件。示例结构可以是:

dir1
dir2
file1.txt
dir3
file2.txt
file3.txt

如果 Java 中有一种方法可以构建一个可以调用以返回连续文本文件的方法,我会很感兴趣:

TextCrawler crawler = new TextCrawler(new File("dir1"));
File textFile;
textFile = crawler.nextFile(); // value is file1.txt
textFile = crawler.nextFile(); // value is file2.txt
textFile = crawler.nextFile(); // value is file3.txt

这里是挑战:所有文本文件的内部列表都不能保存在爬虫对象中。那是微不足道的。在那种情况下,您只需在初始化中构建一个递归构建文件列表的方法。

有没有一种通用的方法可以暂停递归方法,以便在再次调用它时返回到堆栈中它离开的特定点?或者我们是否必须针对每种情况编写特定的内容,并且解决方案必须因文件爬虫、组织结构图搜索、递归素数查找器等而异?

最佳答案

如果您想要一个适用于任何递归函数的解决方案,您可以接受 Consumer目的。它可能看起来像这样:

public void recursiveMethod(Consumer<TreeNode> func, TreeNode node){
if(node.isLeafNode()){
func.accept(node);
} else{
//Perform recursive call
}
}

对于一堆文件,它可能看起来像这样:

public void recursiveMethod(Consumer<File> func, File curFile){
if(curFile.isFile()){
func.accept(curFile);
} else{
for(File f : curFile.listFiles()){
recursiveMethod(func, f);
}
}
}

然后你可以调用它:

File startingFile;
//Initialize f as pointing to a directory
recursiveMethod((File file)->{
//Do something with file
}, startingFile);

根据需要进行调整。

关于java - 在调用之间保留递归函数的堆栈位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38700917/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com