黑马程序员——对于递归的学习

来源:互联网 发布:计算访问消耗数据流量 编辑:程序博客网 时间:2024/05/20 10:51

                                                        ------- android培训、java培训、期待与您交流! ----------  

        今天在视频中学习到了一种类似于循环嵌套的模式——递归,我们所做的练习是:

       列出指定目录下文件或者文件夹,包含子目录中的内容。也就是列出指定目录下所有内容。因为目录中还有目录,只要使用同一个列出目录功能的函数完成即可。
在列出过程中出现的还是目录的话,还可以再次调用本功能。也就是函数自身调用自身。这种表现形式,或者编程手法,称为递归。

package IOtest_1;import java.io.File;public class FileDemo3 {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stub//File dir=new File("f:\\动漫");//showDir(dir);//toBin(10);int x=getSum(10);System.out.println(x);}public static int getSum(int n){if (n==1)return 1;return n+getSum(n-1);}public static void toBin(int num){if(num>0){toBin(num/2);System.out.println(num%2);}}public static void showDir(File dir){System.out.println(dir);File[] files=dir.listFiles();for (int x=0;x<files.length;x++){if(files[x].isDirectory())showDir(files[x]);elseSystem.out.println(files[x]);}}}

然后要做的是将递归于IO联系起来,将一个指定目录下的java文件的绝对路径,存储到一个文本文件中。建立一个java文件列表文件。

我们的思路是:
1,对指定的目录进行递归。
2,获取递归过程所以的java文件的路径。
3,将这些路径存储到集合中。
4,将集合中的数据写入到一个文件中。

ackage IOtest_1;import java.io.BufferedWriter;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.util.ArrayList;import java.util.List;public class javaFileList{/** * @param args */public static void main(String[] args)throws Exception{// TODO Auto-generated method stubFile dir=new File("e:\\hanshu");List<File> list=new ArrayList<File>();fileToList(dir,list);//System.out.println(list.size());File file=new File(dir,"lianxuju.txt");writeToFile(list,file.toString());}public static void fileToList(File dir,List<File> list){File[] files=dir.listFiles();for(File file:files){if(file.isDirectory())fileToList(file,list);else{if(file.getName().endsWith(".java"))list.add(file);}}}public static void writeToFile(List<File> list,String javaListFile)throws Exception{BufferedWriter bufw=null;try{bufw=new BufferedWriter(new FileWriter(javaListFile));for(File f:list){String path=f.getAbsolutePath();bufw.write(path);bufw.newLine();bufw.flush();}}catch(IOException e){throw e;}finally{try {if(bufw!=null)bufw.close();}catch (IOException e){throw e;}}}}

由此,我们可以明显看出递归的特征,就是函数内部仍在调用自身函数。

递归要注意:1,限定条件。2,要注意递归的次数,尽量避免内存溢出。

 


                                       ------- android培训、java培训、期待与您交流! ----------

                                                  详细请查看:http://edu.csdn.net/heima/ 

 



 

原创粉丝点击