Java資料結構與演算法 遞迴和回溯

2021-09-11 13:09:01 字數 1332 閱讀 7568

任何呼叫自身的函式成為遞迴。遞迴是從跟數學領域借鑑過來的一種有用的技術,遞迴**通常比迭代**更加簡潔易懂。

以階乘喂例,其遞迴定義如下:

n!=1          n=0

n!=n*(n-1)! n>0

複製**

**實現:

public static void main(string args) 

static int fact(int n)

if (n==0)

return n*fact(n-1);

}複製**

每次遞迴呼叫都在記憶體中生成乙個新的函式副本,一旦函式結束,這些副本就從記憶體中刪除。

遞迴:迭代:

漢諾塔謎題 演算法:

/**

* @param n 第幾個圓盤

* @param frompeg 源柱

* @param topeg 目標柱

* @param auxpeg 輔助柱

*/void towersofhanoi(int n,char frompeg,char topeg,char auxpeg)

/*** 利用c柱做輔助,將a最上面的n-1個圓盤移動到b

*/towersofhanoi(n-1,frompeg,auxpeg,topeg);

/*** 將剩下的圓盤從a移動到c

*/system.out.println("move disk from peg"+frompeg+"to peg"+topeg);

/*** 利用a做輔助,將b上的n-1個圓盤移動到c

*/towersofhanoi(n-1,auxpeg,topeg,frompeg);

}複製**

給定乙個陣列,用遞迴方法判定陣列中的元素是否是有序的。

int isarrayinsortedorder(int a,int index)

return a[index-1]<=a[index-2]?0:isarrayinsortedorder(a,index-1);

}複製**

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

生成所有n位長的字串。假設a[0..n-1]是乙個大小為n的陣列。

static void binary(int n)else 

}複製**

根據問題規模減小和遞迴求解主定理可以求得時間複雜度為2^n

Java資料結構和演算法(六) 遞迴

遞迴,就是在執行的過程中呼叫自己。遞迴必須要有三個要素 邊界條件 遞迴前進段 遞迴返回段 當邊界條件不滿足時,遞迴前進 當邊界條件滿足時,遞迴返回。利用遞迴求乙個數的階乘 n n n 1 n 2 1 規定 0!1 1!1 負數沒有階乘 利用遞迴進行求乙個數的乘層 public static int ...

資料結構與演算法 遞迴

一 概念 遞迴是一種高效 簡介的編碼技巧,一種應用很廣泛的演算法,比如dfs深度優先搜尋,前中後序二叉樹遍歷等都是使用遞迴。方法或函式呼叫自身的方式成為遞迴呼叫,呼叫稱為遞,返回成為歸 所有遞迴問題都可以用遞迴公式來表示 二 遞迴優缺點 優點 簡潔 缺點 堆疊溢位風險 可根據調整遞迴呼叫的最大深度來...

資料結構與演算法 遞迴和回溯

理論 遞迴函式在執行乙個任務時,需要呼叫函式自身來完成一些子任務。在某些時候,函式不需要繼續呼叫函式自身就可以完成當前子任務。函式不再遞迴的情況稱作基本情形 base case,也稱為基本情況 而函式呼叫自身來執行子任務的情況就稱作遞迴情形 recursive case 形式描述 舉例 理論 每次遞...