递归 实例

 

 

/**

 * 用于熟悉递归

 * 简单的阶乘、斐波那契额数列、删除文件(包括文件夹)、访问文件(输出文件按树状输出)

 * 

 * @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;

	}



}

  

你可能感兴趣的:(递归)