遞歸和回溯


遞歸和回溯

遞歸

任何調用自身的函數稱為遞歸。遞歸的要點在於,遞歸函數調用自身去解決一個規模比原始問題要小一些的問題。

遞歸函數的格式

  • 函數不在遞歸地情況稱作基本情形(base case,也稱基本情況)。
  • 函數調用自身來執行子任務的情況就稱作遞歸情形(recursive case)。
if (判斷是否為基本情形)
    return 該基本情形時的函數值
else if (判斷是否為另一種基本情形)
    return 該基本情形時的函數值
//遞歸情形
else return (執行某些工作並遞歸調用)

例:n!等於n~1之間所有整數的乘積,起遞歸定義如下

n! = 1 n=0|1 (基本情形)

n! = n*(n-1)! n>0 (遞歸情形)

代碼如下

	public static int Fact(int n) {
		// 基本情形:當參數為0或1時,返回1
		if(n == 1)
			return 1;
		else if(n == 0)
			return 1;
		// 遞歸情形:返回n*(n-1)!
		else 
			return n * Fact(n - 1);
	}

遞歸和內存可視化

public static int Print(int n) {
		if (n == 0)
			return 0;
		else {
			System.out.println(n);
			return Print(n - 1);
		}
	}

Snipaste_2019-05-08_21-25-48.jpg
Snipaste_2019-05-08_21-26-04.jpg

回溯

回溯是一種采用分治策略進行窮舉搜索的方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM