递归

递归:

     就是函数自身调用自身

事实上全部的递归问题都能够看成是阶层问题

所要解决的整个问题(整个递归函数)看成是 f(n).在这个递归函数中要做到例如以下几点:

  1.写出递归的出口
  2.解决当前要解决的问题-----相当与阶层问题中的(n)
  3.递归下去(调用自身)解决同样的但规模要小的又一问题-----相当于f(n-1)

递归要注意:


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);
}
}
}

}



}


posted @ 2017-05-27 18:20  wzzkaifa  阅读(140)  评论(0编辑  收藏  举报