1. 程式人生 > >Java實用方法整理(十八)——遞迴

Java實用方法整理(十八)——遞迴

1,遞迴方法注意事項

(1)遞迴一定要有出口,否則就是死遞迴

(2)遞迴的次數不能太多,否則就記憶體溢位

(3)構造方法不能遞迴使用

2,遞迴方法建立技巧

(1)遞迴是一個方法

(2)方法中要有出口(例如:return,輸出命令等)

(3)尋找規律,以程式碼實現規律

3,案例+原始碼

(1)有一對兔子,從出生後第3個月起每個月都生1對兔子,小兔子長到第3個月後每個月又生1對兔子,假如兔子都不死,那麼第N個月時兔子的對數是多少?

分析前6個月兔子對數規律如下:從第三個月開始,每個月兔子數等於前兩個月兔子數之和。

月數 1 2 3 4 5 6
兔子數 1 1 2 3 5 8
package test;
/**
* @author Manduner_TJU
* @version 建立時間:2018年10月26日下午7:32:43
*/
//不死神兔問題
public class Test2 {
	public static void main(String[] args) {
		int n = 20;
		System.out.println(digui(n));
	}
	
	public static int digui(int n) {
		if(n == 1 || n == 2) {
			return 1;
		}else {
			return digui(n-2) + digui(n-1);
		}
	}
}

(2)輸出我的電腦G盤目錄下所有以“.mkv”結尾的檔案的絕對路徑

package test;

import java.io.File;

/**
* @author Manduner_TJU
* @version 建立時間:2018年10月26日下午9:42:39
*/
public class Test4 {
	public static void main(String[] args) {
		File file = new File("G:\\");
		getAviPath(file);
	}

	private static void getAviPath(File file) {
		File[] ff = file.listFiles();
		//由於我的電腦G盤目錄下有系統自帶的隱藏資料夾,會導致ff為null,所以做出了以下判斷
		//本人建議不管是遍歷磁碟根目錄還是某個資料夾,都要加上下面的判斷,否則會報空指標錯誤
		if (ff == null) {
			return;
		}
		
		for(File f : ff) {
			if(f.isFile()) {
				if(f.getName().endsWith(".mkv")) {
					System.out.println(f.getAbsolutePath());
				}
			}else {
				getAviPath(f);
			}
		}
		
	}
}

(3)刪除我的電腦G盤目錄下Test資料夾(注意,此功能慎用,萬一刪錯檔案夾了,可就恢復不了了)

package test;

import java.io.File;

/**
* @author Manduner_TJU
* @version 建立時間:2018年10月26日下午10:31:41
*/
public class Test5 {
	public static void main(String[] args) {
		File file = new File("G:\\Test");
		deleteTestFile(file);
	}

	private static void deleteTestFile(File file) {
		File[] ff = file.listFiles();
		if(ff==null) {
			return;
		}else {
			for(File f : ff) {
				if(f.isDirectory()) {
					deleteTestFile(f);
				}else {
					System.out.println(f.getName()+"----"+f.delete());
				}
			}
		}
		
		System.out.println(file.getName()+"----"+file.delete());
		
	}
}