遞迴演算法與分治策略

2021-10-05 15:06:39 字數 873 閱讀 2824

關於遞迴的學習

1、遞迴演算法的基本思想是:把規模大的、較難解決的問題變成規模較小的的問題。規模較小的問題又變成規模更小的問題,並且小到一定程度可以直接得出它的解,從而得到原來問題的解。

遞迴是一種直接或間接呼叫自身的函式的一種演算法,很常用,一般用於解決三類問題:

資料的定義按遞迴定義的。(fibonacci函式)

資料的結構形式是按遞迴定義的。(圖,樹等)

問題解法用遞迴演算法實現。(回溯演算法)//

2、使用遞迴的幾個條件

這個問題是可以分解的,分解出來的問題的解法與之前的大問題的解法相同。

是乙個可以分解到最後可以解決的問題,也就是有結束的條件,邊界條件。

3、遞迴與迴圈演算法的比較

一般情況下乙個問題可以用迴圈來解決就可以用遞迴來解決。很相似,但是是兩種不同的思路。

遞迴的優點在於**簡潔,一眼看過去就明白個大概,但是假如呼叫的層數太多,就會導致記憶體方面的問題,會占用過多的記憶體空間。而迴圈呢,結構簡單,道理也簡單。對於一些簡單的問題,個人感覺迴圈就完事了。

遞迴的缺點在於執行的效率低,通常會把遞迴演算法轉換為 遞推 或者非遞迴的演算法

經典的演算法以及一些常用的操作(地方)

1、fibonacci函式———每一項都是前兩項的和

(1)遞迴實現:遞迴呼叫次數太多

int a(int  n )//第n項的值

(2)遞推:

int a(int n)

if(target == array[middle])

if(target < array[middle])

if(target > array[middle])

}

遞迴與分治策略

1 全排列問題 設r n 是要進行排列的n個元素。集合x中元素的全排列記為perm x 求r n 的全排列perm r n 用遞迴演算法求解 1 找出遞迴子結構性質 即原問題的解包含了子問題的解,且子問題的描述與原問題相同。這就可以用子問題的解來構造原問題的解。設r i r n 這是乙個子問題。設 ...

遞迴與分治策略

1.遞迴 直接或間接地呼叫自身的演算法稱為遞迴演算法。用函式自身給出定義的函式稱為遞迴函式。1 階乘函式 include using namespace std int main int factorial int n 2 fibonacci數列 include using namespace st...

分治策略與遞迴

先看 資料結構與演算法分析 中對分治策略的解釋 把問題分成兩個大致相等的子問題,然後再遞迴地對他們進行求解,這是 分 治 階段將兩個子問題的解合併到一起並可能再做些少量的附加工作,最後得到整個問題的解。由定義可以看出,分治需要進行兩步操作 分 將問題恰當的劃分為需要迭代處理的兩個子問題,治 將兩個子...