2 xlh198593 xlh198593 于 2014.12.11 09:59 提问

求大神将下面递归算法改为非递归算法,万分感谢 50C

public void void processFilePath(String sourceDir) {
File file = new File(eachSource);
if (file.isDirectory()) {

for (File each : file.listFiles()) {
processFilePath(each.getAbsolutePath());
}

} else if (file.getAbsolutePath().endsWith(".java")) {
System.out.println(file.getAbsolutePath());
}

}

5个回答

devmiao
devmiao   Ds   Rxr 2015.06.18 10:12

如果你只是要找一个非递归的程序,自然可以google下,但是这种程序往往和你的程序没什么关系。但是如果你是想掌握一般地,将一个递归算法转为非递归的规律(直接根据程序转,无需考虑别的算法)。我可以给你一些指导。
具体来说,就是使用堆栈来模拟递归,http://bbs.csdn.net/topics/390317050

lxq_xsyu
lxq_xsyu   Rxr 2014.12.11 10:10

你这个貌似就是递归啊!

xlh198593
xlh198593 我是想把这个算法改为非递归的。。。
3 年多之前 回复
u012913636
u012913636   2014.12.12 15:03

你要找的是不是这个?
public static void scanDirNoRecursion(String path){
int num = 0 ;
LinkedList list = new LinkedList();
File dir = new File(path);
File file[] = dir.listFiles();
for (int i = 0; i < file.length; i++) {
if (file[i].isDirectory())
list.add(file[i]);
else{
System.out.println(file[i].getAbsolutePath());
num++;
}
}
File tmp;
while (!list.isEmpty()) {
tmp = (File)list.removeFirst();//首个目录
if (tmp.isDirectory()) {
file = tmp.listFiles();
if (file == null)
continue;
for (int i = 0; i < file.length; i++) {
if (file[i].isDirectory())
list.add(file[i]);//目录则加入目录列表,关键
else{
System.out.println(file[i]);
num++;
}
}
} else {
System.out.println(tmp);
num++;
}
}
}

XJC_gx
XJC_gx   2015.06.18 10:02

同意楼上图片说明

sunbo624
sunbo624   2014.12.12 17:14

思路就是把所有的文件夹都存起来 然后对这个循环 就是楼上给的代码

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!