递归练习

来源:互联网 发布:库里2016总决赛数据 编辑:程序博客网 时间:2024/05/29 11:44

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

练习一:递归列出目录下的文件或者文件夹,包含子目录中的内容,要求带层次列出。
分析:
因为目录中还有目录,所以只要使用同一个列出目录功能的函数完成即可。如果在列出过程中出现的还是目录的话,还可以再次调用本功能,也即是函数自身调用自身,这种编程方式称为递归。

package OtherIO;import java.io.File;public class ListFile {    public static void main(String[] args) {        File file = new File("E:\\WorkSpace");        showDir(file,0);    }    public static void showDir(File dir,int level){        System.out.println(getLevel(level)+dir.getName());        level++;        File[] files = dir.listFiles();        for(int x=0; x<files.length; x++){            if(files[x].isDirectory()){                showDir(files[x],level);            }else{                System.out.println(getLevel(level)+files[x]);            }        }    }     public static String getLevel(int level){        StringBuilder sb = new StringBuilder();        sb.append("|--");        for(int x=0; x<level; x++){            sb.insert(0, " ");        }        return sb.toString();    }}

练习二:删除一个带内容的目录。
删除原理:
在windows中,删除目录是从里往外删除的,既然是从里往外删除,就要用到递归。

package OtherIO;import java.io.File;public class RemoveDir {    public static void main(String[] args) {        File file = new File("D:WorkSpace");        removeDir(file);    }    public static void removeDir(File dir){        File[] files = dir.listFiles();        for(int x=0; x<files.length; x++){            if(files[x].isDirectory()&&!files[x].isHidden()){                removeDir(files[x]);            }else{                files[x].delete();            }        }        dir.delete();    }}

练习三:将一个指定目录下的java文件的绝对路径,存储到一个文本文件中,即建立一个java列表文件。
思路:
1.对指定的目录进行递归。
2.获取递归过程中所有的java文件的路径。
3.将这些路径存储到集合中。
4.将集合中的数据写入到一个文件中。

package OtherIO;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 ShowJavaFileList {    public static void main(String[] args) {        File dir = new File("E:\\WorkSpace");        List<File> list = new ArrayList<File>();        List<File> list1 = fileToList(dir,list);        File file = new File(dir,"javalist.txt");        writeToFile(list1, file.toString());    }    public static List<File> 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);            }        }        return list;    }    public static void writeToFile(List<File> list,String listFile){        BufferedWriter bufw = null;        try {            bufw = new BufferedWriter(new FileWriter(listFile));            for(File file: list){                String path = file.getAbsolutePath();                bufw.write(path);                bufw.newLine();                bufw.flush();            }        } catch (IOException e) {            throw new RuntimeException();        }finally{                try {                    if(bufw!=null)                    bufw.close();                } catch (IOException e) {                    throw new RuntimeException();                }        }    }}
0 0
原创粉丝点击