zoukankan      html  css  js  c++  java
  • 递归 实例

    /**
     * 用于熟悉递归
     * 简单的阶乘、斐波那契额数列、删除文件(包括文件夹)、访问文件(输出文件按树状输出)
     * 
     * @author wangzhu
     */
    import java.io.File;
    import java.util.Iterator;
    import java.util.TreeSet;
    
    public class Deno {
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		System.out.println(factorial(5));
    		for (int i = 1; i < 10; i++) {
    			System.out.println(fibonacci(i));
    		}
    		String fileString = "E:/ceshi";
    		printDir(new File(fileString), 0);
    		printTreeFile(new File(fileString), 0);
    	}
    
    	/**
    	 * 阶乘 n!=n*(n-1)*...*2*1 f(x)=x*f(x-1)
    	 * 
    	 * @param number
    	 * @return
    	 */
    	public static int factorial(int number) {
    		if (1 == number) {
    			return 1;
    		}
    		int temp = factorial(number - 1);
    		return number * temp;
    	}
    
    	/**
    	 * 斐波那契数列 a[n]=a[n-1]+a[n-2](a[1]=1,a[2]=1)
    	 * 
    	 * @param number
    	 * @return
    	 */
    	public static int fibonacci(int number) {
    		if (1 == number || 2 == number) {
    			return 1;
    		}
    		return fibonacci(number - 1) + fibonacci(number - 2);
    	}
    
    	/**
    	 * 删除某文件下的所有文件
    	 * 
    	 * @param file
    	 */
    	public static void deleteAll(File file) {
    		if (file.isFile() || 0 == file.list().length) {
    			file.delete();
    			return;
    		}
    		for (File f : file.listFiles()) {
    			// 删除wenjianf下的所有文件
    			deleteAll(f);
    			// 最后删除自己,只有空的文件夹(目录)才可以被删除,否则出错
    			f.delete();
    		}
    	}
    
    	/**
    	 * 按默认的读取方式输出某文件下的所有文件名,桉树状输出
    	 * 
    	 * @param file
    	 * @param k
    	 */
    	public static void printTreeFile(File file, int k) {
    		for (File f : file.listFiles()) {
    			for (int i = 0; i <= k; i++) {
    				System.out.print("\t");
    			}
    			System.out.println(f.getName());
    			if (f.isDirectory()) {
    				printTreeFile(f, ++k);
    			}
    		}
    	}
    
    	/**
    	 * 输出目录与文件 现有文件再是目录,按树状输出
    	 * 
    	 * @param file
    	 * @param k
    	 */
    	public static void printDir(File file, int k) {
    		File[] files = file.listFiles();
    		TreeSet<HelperFile> ts = new TreeSet<HelperFile>();
    		HelperFile hf = null;
    		for (File f : files) {
    			hf = new HelperFile(f);
    			ts.add(hf);
    		}
    		Iterator<HelperFile> it = ts.iterator();
    		while (it.hasNext()) {
    			hf = it.next();
    			for (int i = 0; i <= k; i++) {
    				System.out.print("\t");
    			}
    			if (hf.file.isFile()) {
    				System.out.println(hf.file.getName());
    			} else {
    				System.out.println(hf.file.getName());
    				printDir(hf.file, ++k);
    			}
    		}
    	}
    }
    
    class HelperFile implements Comparable<HelperFile> {
    	File file;
    
    	public HelperFile(File file) {
    		this.file = file;
    	}
    
    	@Override
    	public int compareTo(HelperFile hf) {
    		if (hf.file.isDirectory()) {
    			if (this.file.isDirectory()) {
    				return this.file.getName().compareTo(hf.file.getName());
    			}
    			return -1;
    		}
    		return 1;
    	}
    
    }
    

      

  • 相关阅读:
    Masonry介绍与使用实践:快速上手Autolayout
    iOS:实现图片的无限轮播(二)---之使用第三方库SDCycleScrollView
    FMDB的使用方法
    ViewController的生命周期分析和使用
    使用Xcode7的Instruments检测解决iOS内存泄露
    IOS比较常用的第三方组件及应用源代码(持续更新中)
    SDWebImage的简单使用
    ant编译tomcat-web项目
    git命令记录
    zabbix问题恢复正常,但是图表中还是显示故障存在
  • 原文地址:https://www.cnblogs.com/xiaoxian1369/p/2683450.html
Copyright © 2011-2022 走看看