java - 了解递归流程

标签 java recursion

我知道递归的基础知识,但在给定的代码中我很难理解流程。
请帮帮我...

public ArrayList<String> searchFolders(File fo) {

    if (fo.isDirectory()) {

        String internalNames[] = fo.list();



        for (int i = 0; i < internalNames.length; i++) {
            searchFolders(new File(fo.getAbsolutePath() + "\\"+ internalNames[i]));
            path = fo.getAbsolutePath() + "\\" + internalNames[i];
        }
    }
    if (fo.isFile()) {

        alist.add(fo.toString());


    }


    return alist;
}

最佳答案

基本上,此代码获取目录的所有内容并将它们添加到全局变量 alist

你给它一个目录。 如果它是一个文件,则将其名称添加到列表中,然后该方法返回(文件不能有子文件夹)。

如果是文件夹,则列出文件夹中的所有内容:

String internalNames[] = fo.list();

然后对文件夹中的每个项目执行相同的搜索:

searchFolders(new File(fo.getAbsolutePath() + "\\"+ internalNames[i]));

因此,如果您当前正在搜索的项目是一个文件(如果 fo.getAbsolutePath() + "\\"+ internalNames[i] 是一个文件的目录),那么它只需将文件添加到全局 ArrayList。

否则,如果它是一个文件夹,它会像搜索它刚刚查看的文件夹一样搜索它,并列出该文件夹中的所有文件。

您似乎没有使用变量 path

当您返回 alist 时,您将返回到目前为止在该文件夹(及其子文件夹)中找到的所有文件。 您没有返回文件夹名称,因为 fo.isDirectory() 时,您没有将其名称添加到 alist

enter image description here

关于java - 了解递归流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11116157/

相关文章:

java - 如何检索数据库中一列字段中的多个数据并将其逐个显示到输入字段中

javascript - 如何向我的斐波那契数列添加停止指令?

c++ - 无限递归 C++

javascript - JavaScript 中的递归调用不起作用?

java - 两个短整数的异或

java迷宫游戏错误仅朝一个方向进行,使用数组

java - 从Android屏幕上删除图像

java - Gradle、War、tomcat 和 list

python - 包含函数的序列的递归公式

java - DFS - Java递归 - 求节点之和