有关递归练习

  • 求1到某个数的和
public static int getSum(int num) {
        if (1 == num)
            return 1;
        return num+getSum(num-1);
    }
  • 遍历某个目录下的所有文件
public static void getDirAndFile(File dir) {
        System.out.println("dir:" + dir);
        File[] files = dir.listFiles();

        for (File file2 : files) {
            if (file2.isHidden()) {
                continue;
            }
            if (file2.isDirectory()) {
                getDirAndFile(file2);
            } else {
                System.out.println("file: " + file2.getName());
            }

        }

    }
  • 若是在不使用递归,遍历目录下所有子目录和包含的文件

     思路:
  * 1、可以对每个目录for循环,不过层级过多,容易死掉
  * 2、每遍历到一个目录,不对其继续遍历,而是先存储到容器中
  *    相当于把所有目录(无论是否同级)都存储起来
  * 3、遍历容器时就是取到目录,对目录继续遍历即可
  * 4、从容器中遍历目录,发现内部还有目录,则一样存储到容器中
  * 5、只要不断遍历这个容器就可以

public static void getAllFile(){
        //队列存储目录
        Quere<File> quere =new Quere<File>();
        
        File dir =new File("F:\");
        File[] files = dir.listFiles();
        System.out.println("----------------"+dir+"---------------");
        for (File file : files) {
            if(file.isDirectory()&&!file.isHidden()){
                quere.myAdd(file);
            }else{
                System.out.println(file.getName());
            }
        }
        //遍历队列中的目录,若内部还有目录,则存储到队列中
        //循环遍历队列,直到为空
        while(!quere.isNull()){
            File sub_dir = quere.myGet();
            System.out.println("--------------"+sub_dir+"-----------------");
            File[] sub_Files = sub_dir.listFiles();
            for (File file : sub_Files) {
                if(file.isDirectory()){                    
                    quere.myAdd(file);
                }else{
                    System.out.println(file.getName());
                }
            }
        }
    }
class Quere<T>{
    
    private LinkedList<T> link;
    public Quere(){
        
        link =new LinkedList<T>();
        
    }
    
    public void myAdd(T t){
        
        link.addFirst(t);
    }

    public T myGet(){
        return link.removeLast();
    }
    
    public boolean isNull(){
        
        return link.isEmpty();
    }

}
原文地址:https://www.cnblogs.com/bbthome/p/3574593.html