java递归栗子

慎用!!!判断不慎会 Exception in thread "main" java.lang.StackOverflowError

import java.io.File;

/**
 * 判断一旦出错就会出现堆栈溢出 慎用!!!!!
 *
 */
public class Dg {
	public static void main(String[] args) {
		String path = ".";
		allFiles(new File(path), 0);
		System.out.println(fib(9));
		printFib(9);
		num2binary(9);
		System.out.println();
		num2binary2(9);
	}

	private static void printFib(int i) {
		for (int j = i; j > 0; j--) {
			System.out.print(fib(j) + " ");
		}
	}

	/**
	 * 遍历树结构类似于此
	 */
	private static void allFiles(File root, int level) {
		if (root.isFile()) {
			System.out.println(root.getAbsolutePath());
			return;
		}
		level++;
		System.out.println(root.getAbsolutePath());
		File[] listFiles = root.listFiles();
		for (File file : listFiles) {
			allFiles(file, level);// 递归
		}
	}

	/**
	 * 菲波那切数列 1 1 2 3 5 8
	 */
	private static int fib(int n) {
		if (n < 1) {
			return 0;
		}
		if (n == 1 || n == 2) {
			return 1;
		}
		return fib(n - 1) + fib(n - 2);
	}

	/**
	 * 递归实现十进制转二进制
	 */
	private static void num2binary(int n) {
		if (n == 0) {
			System.out.print(0);
			return;
		} else if (n == 1) {
			System.out.print(1);
			return;
		} else {
			num2binary(n / 2);
			System.out.print(n % 2);
		}

	}

	private static void num2binary2(int n) {
		String hexString = Integer.toBinaryString(n);
		System.out.println(hexString);

	}

}

 

posted on 2018-06-04 18:38  开心就好呀·  阅读(62)  评论(0编辑  收藏  举报

导航