演算法分析與設計 遞迴與分治策略

2021-09-27 07:45:17 字數 1278 閱讀 8962

直接或間接地呼叫自身的演算法稱為遞迴演算法。用函式自身給出定義的函式稱為遞迴函式。

在計算機演算法設計與分析中,使用遞迴技術往往使函式的定義和演算法的描述簡潔且易於理解。

例1 階乘函式

可遞迴地定義為:

其中:n=0 時,n!=1為邊界條件

n>0 時,n!=n(n-1)!為遞迴方程

邊界條件與遞迴方程是遞迴函式的二個要素,遞迴函式只有具備了這兩個要素,才能在有限次計算後得出結果。

例2 fibonacci數列

無窮數列1,1,2,3,5,8,13,21,34,55,…,被稱為fibonacci數列。它可以遞迴地定義為:

第n個fibonacci數可遞迴地計算如下:

遞迴需要有邊界條件、遞迴前進段和遞迴返回段。

當邊界條件不滿足時,遞迴前進;

當邊界條件滿足時,遞迴返回。

注意在使用遞增歸策略時,必須有乙個明確的遞迴結束條件,稱為遞迴出口,否則將無限進行下去(死鎖)。

遞迴的缺點:

遞迴演算法解題的執行效率較低。

在遞迴呼叫過程中,系統為每一層的返回點、區域性變數等開闢了堆疊來儲存。遞迴次數過多容易造成堆疊溢位等。

例3逆序輸出乙個正數中的每一位數

例如,對於數12345,依次輸出5 4 3 2 1

分析: 如果n/10==0,則 輸出n; 否則 輸出n%10, 然後,對n/10進行相同處理

void

reverse

(int n)

}main()

順序輸出乙個正數中的每一位數例如,對於數12345,依次輸出1 2 3 4 5

分析: 如果n/10==0,則 輸出n; 否則 先對n/10進行相同處理之後,cout

reverse

(int n)

}main()

演算法設計與分析 遞迴與分治策略 線性時間選擇

問題描述 給定線性序集中n個元素和乙個整數k,1 k n.要求找出這n個元素中第k小的元素,即如果將這個n個元素依其線性序排列時,排在第k個位置的元素就是要找的元素,當k 1時,要找的就是最小的元素 當k n,就是最大的元素 當k n 1 2,稱為中位數。問題分析 在某些特殊的情況下,我們可以實現線...

遞迴演算法與分治策略

關於遞迴的學習 1 遞迴演算法的基本思想是 把規模大的 較難解決的問題變成規模較小的的問題。規模較小的問題又變成規模更小的問題,並且小到一定程度可以直接得出它的解,從而得到原來問題的解。遞迴是一種直接或間接呼叫自身的函式的一種演算法,很常用,一般用於解決三類問題 資料的定義按遞迴定義的。fibona...

遞迴與分治策略

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