递归
递归:
就是函数自身调用自身
事实上全部的递归问题都能够看成是阶层问题
所要解决的整个问题(整个递归函数)看成是 f(n).在这个递归函数中要做到例如以下几点:
1.写出递归的出口
2.解决当前要解决的问题-----相当与阶层问题中的(n)
3.递归下去(调用自身)解决同样的但规模要小的又一问题-----相当于f(n-1)
递归要注意:
2、要注意递归次数,避免内存溢出
举例说明:列出指定文件夹下文件或者文件夹,包括子文件夹中的内容
import
java.io.*;
import java.util.*;
public class Test1 {
/**
* 将一个指定文件夹下的java 文件的绝对路径存储到一个文本文件里,建立一个java 文件列表文件
* 思路:
* 1.由于文件夹下可能还有文件夹,所以要用到递归
* 2.获取递归过程中全部java 文件的路径
* 3.将这些路径存储到集合中
* 4.将集合中的数据写入到一个文本中
*/
public static void main(String[] args)throws IOException {
File dir=new File("c:\\Users\\Administrator\\Desktop\\黑马代码\\day08");
List<File> list=new ArrayList<File>();//建立一个集合
filetolist(dir,list);
File file=new File(dir,"javalist.txt");//建立一个java 文件列表文件
writetofile(list,file.toString());
System.out.println(list.size());
}
public static void writetofile(List<File> list,String javalistfile)throws IOException {
BufferedWriter bufw=null;
try {
bufw=new BufferedWriter(new FileWriter(javalistfile));
for (File file : list) {
String path=file.getAbsolutePath();
bufw.write(path);
bufw.newLine();
bufw.flush();
}
} catch (IOException e) {
e.printStackTrace();
}
finally{
try {
if (bufw!=null) {
bufw.close();}
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void filetolist(File dir,List<File> list) {
File[] files=dir.listFiles();
for (File file : files) {
if (file.isDirectory()) {
filetolist(file,list);//运用递归
System.out.println(file);
}else {
if (file.getName().endsWith(".java")) {
list.add(file);
}
}
}
}
}