递归 实例

/**
 * 用于熟悉递归
 * 简单的阶乘、斐波那契额数列、删除文件(包括文件夹)、访问文件(输出文件按树状输出)
 * 
 * @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;
	}

}

  

原文地址:https://www.cnblogs.com/xiaoxian1369/p/2683450.html