Java I/O Recursion

递归方式计算阶乘

package com.fairy.io;

public class Recursion {
	// 循环方式计算阶乘,又叫做迭代方式
	public int compute(int number) {
		int result = 1;

		for (int i = number; i > 0; i--) {
			result *= i;
		}

		return result;
	}

	// 使用递归方式计算阶乘
	public int compute2(int number) {
		if (1 == number) {
			return 1;
		} else {
			return number * compute2(number - 1);
		}
	}

	public static void main(String[] args) {
		Recursion test = new Recursion();

		System.out.println(test.compute(5));
		System.out.println(test.compute2(5));
	}
}
 

递归方式计算斐波那契数列

package com.fairy.io;

public class Fibonacci {
	// 使用递归计算斐波那契数列
	public int compute(int n) {
		if (1 == n || 2 == n) {
			return 1;
		} else {
			return compute(n - 1) + compute(n - 2);
		}
	}
	
	public static void main(String[] args) {
		Fibonacci fibonacci = new Fibonacci();
		
		System.out.println(fibonacci.compute(1));
		System.out.println(fibonacci.compute(2));
		System.out.println(fibonacci.compute(3));
		System.out.println(fibonacci.compute(4));
		System.out.println(fibonacci.compute(5));
		System.out.println(fibonacci.compute(6));
	}
}

 

删除一个文件目录下的所有文件,采用递归实现 

package com.fairy.io;

import java.io.File;

public class FileTest7 {
	public static void deleteAll(File file) {
		if (file.isFile() || file.list().length == 0) {
			file.delete();
		} else {
			File[] files = file.listFiles();
			
			for (File f : files) {
				deleteAll(f);
				f.delete();
			}
		}
	}
	
	public static void main(String[] args) {
		deleteAll(new File("C:/abc"));
	}
}
 

 

罗列出一个文件目录下的所有文件,采用递归实现。

Version1:

package com.fairy.io;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class FileTest8 {
	
	// 用于判断目录或文件所处的层次
	private static int time;
	
	public static void deepList(File file) {
		if (file.isFile() || 0 == file.listFiles().length) {
			return;
		} else {
			File[] files = file.listFiles();

			files = sort(files);
			
			for (File f : files) {
				StringBuilder output = new StringBuilder();
				
				if (f.isFile()) {
					output.append(getTabs(time));
					output.append(f.getName());
				} else {
					output.append(getTabs(time));
					output.append(f.getName());	
					output.append("\\");
				}
				
				System.out.println(output);
				
				if (f.isDirectory()) {
					time++;
					
					deepList(f);
					
					time--;
				}
			}
		}
	}

	// 整理文件数组,使得目录排在文件之前
	private static File[] sort(File[] files) {
		List<File> sorted = new ArrayList<File>();

		for (File f : files) {
			if (f.isDirectory()) {
				sorted.add(f);
			}
		}

		for (File f : files) {
			if (f.isFile()) {
				sorted.add(f);
			}
		}

		return sorted.toArray(new File[files.length]);
	}

	// 判断需要加多少tab的方法
	private static String getTabs(int time) {
		StringBuilder sb = new StringBuilder();

		for (int i = 0; i < time; i++) {
			sb.append("\t");
		}

		return sb.toString();
	}
	
	public static void main(String[] args) {
		File file = new File("D:/Util");
		
		deepList(file);
	}
}
 

Version2:

import java.io.File;

public class ListFileDemo {
	
	public static void main(String[] args) {
		File file = new File("C:/Documents and Settings/root/桌面");
		list(file);
	}
	
	public static void list(File file) {
		if (file.isDirectory()) {
			File[] files = file.listFiles();
			
			if (files != null) {
				for (File f : files) {
					list(f);
				}
			}
		}
		
		System.out.println(file);
	}
}

你可能感兴趣的:(Java I/O Recursion)