遞迴和分治策略

2021-09-29 01:21:06 字數 2546 閱讀 4720

1.遞迴的概念

直接或間接地呼叫自身的演算法稱為遞迴演算法。用函式自身給出定義的函式稱為遞迴函式。 在計算機演算法設計與分析中,使用遞迴技術往往使函式的定義和演算法的描述簡潔且易於理解。

對於大運算來說由於過程太多效率很低,且開銷大,常用遞推代替

編寫乙個遞迴函式,將10進製轉化成radix進製(輸出二進位制形式)

#includeusing namespace std;

void change(int t,int r)

void reverse( int n)的全排列(n!種)。 設r=是要進行排列的n個元素,     ri=r-。 集合x中元素的全排列記為perm(x)。 (ri)perm(x)表示在全排列perm(x)的每乙個排列前加上字首得到的排列。

#includeusing namespace std;

void perm(int list, int k, int m)

return -1;

}int main()

; cout《眾數和重數

問題描述:給定含有n個元素的多重集合s,每個元素在s中的次數稱為該元素的重數。多重集s中重數最大的元素稱為眾數。     例如,s=。眾數為2,其重數為3。     任務:對於給定的由n個自然數組成的多重數集s,程式設計計算s的眾數及其重數。

#include using namespace std;

struct mdata;

void msort(int a, int s, int e, mdata &result)

if(leftresult.count)

if(right-s>result.count) msort(a,s,right-1, result);

if(e-right>result.count) msort(a,right+1,e,result);

return ;

}int main()

; int a[10]=;

msort(a,0,9,result);

cout《迴圈賽日程表

迴圈賽日程表問題,設有n=2k個選手要進行迴圈賽,設計乙個滿足以下要求的比賽日程表:

每個選手必須與其他n-1個選手各賽一次;

每個選手一天只能賽一次;

迴圈賽一共進行n-1天。

#includeusing namespace std;

#define max 100

int a[max][max];

void copy(int tox, int toy, int fromx, int fromy, int r)

void table(int k)

}int main()

return 0;

}

棋盤覆蓋問題

在乙個2k×2k個方格組成的棋盤中,恰有乙個方格與其他方格不同,稱該方格為一特殊方格,且稱該棋盤為一特殊棋盤。 在棋盤覆蓋問題中,要用圖示的4種不同形態的l型骨牌覆蓋給定的特殊棋盤上除特殊方格以外的所有方格,且任何2個l型骨牌不得重疊覆蓋。 覆蓋任意乙個2k×2k的特殊棋盤,用到的骨牌數恰好為(4k-1)/3。

//æåå츲¸çîêìâ

#includeusing namespace std;

int tile=1;

int board[4][4];

void cb(int tr, int tc, int dr, int dc, int size)

if (dr < tr + s && dc >= tc + s)

cb(tr, tc + s, dr, dc, s);

else

if (dr >= tr + s && dc < tc + s)

cb(tr + s, tc, dr, dc, s);

else

if (dr >= tr + s && dc >= tc + s)

cb(tr + s, tc + s, dr, dc, s);

else

}int main()

int dr, dc;

cin >> dr >> dc;

cb(0, 0, dr, dc, size);

for (int i = 0; i < 4; i++)

}

輸油管道問題

某石油公司計畫建造一條由東向西的主輸油管道。該管道要穿過乙個有n口油井的油田。從每口油井都要有一條輸油管道沿最短路經(或南或北)與主管道相連。 如果給定n口油井的位置,即它們的x座標(東西向)和y座標(南北向),應如何確定主管道的最優位置,即使各油井到主管道之間的輸油管道長度總和最小的位置?

給定n口油井的位置,程式設計計算各油井到主管道之間的輸油管道最小長度總和。

#include#includeusing namespace std;

int main()

sort(a, a + n);

int min = 0;

for (int i = 0; i < n; i++)

cout << min << endl;

}

遞迴和分治策略

直接或間接地呼叫自身的演算法稱為遞迴演算法。用函式自身給出定義的函式稱為遞迴函式。在計算機演算法設計與分析中,使用遞迴技術往往使函式的定義和演算法的描述簡潔且易於理解。對於大運算來說由於過程太多效率很低,且開銷大,常用遞推代替 編寫乙個遞迴函式,將10進製轉化成radix進製 輸出二進位制形式 in...

遞迴與分治策略

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...