(演算法設計與分析)實驗二 熟悉遞迴演算法

2021-10-07 04:04:16 字數 1825 閱讀 5922

利用遞迴知識和c/c++語言,提公升自己的程式設計能力,實現遞迴**。

實現若干個遞迴描述的演算法。

1) 漢諾塔問題的遞迴演算法

2) 棋盤覆蓋問題的遞迴演算法

3) 其它:任意設計乙個遞迴問題,寫出遞推關係並實現它。

1) 漢諾塔遞迴演算法

#include

using

namespace std;

int i =1;

void

hanoi

(int n ,

char source ,

char relay ,

char destination)

else

}int

main()

2) 棋盤覆蓋遞迴演算法

#include

using

namespace std;

int tile=1;

int board[

100]

[100];

void

chessboard

(int tr,

int tc,

int dr,

int dc,

int size)

if(dr

=tc+s)

chessboard

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

;else

if(dr>=tr+s && dc

chessboard

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

;else

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

chessboard

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

;else

}int

main()

}結果:

3) 快速排序的遞迴演算法

在快速排序中,記錄的比較和交換是從兩端向中間進行的,關鍵字較大的記錄一次就能交換到後面單元,關鍵字較小的記錄一次就能交換到前面單元,記錄每次移動的距離較大,因而總的比較和移動次數較少。
#include

using

namespace std;

void

quicksort

(int

,int

,int);

intmain()

; cout <<

"排序前:"

;for

(int i =

0; i <

10; i++

) cout << endl;

quicksort

(num,0,

9); cout <<

"排序後:"

;for

(int i =

0; i <

10; i++)}

void

quicksort

(int a,

int left,

int right)

} a[left]

= a[i]

; a[i]

= temp;

quicksort

(a, left, i-1)

;quicksort

(a, i+

1, right)

;}

演算法設計與分析 遞迴

遞迴是一種技術手段,並不嚴格算是一種演算法,是指程式直接間接呼叫自身的程式設計技巧。遞迴需要有邊界條件,遞迴前進段和遞迴返回段。1 當邊界條件不滿足時,遞迴前進 2 當邊界條件滿足時,遞迴返回。ps 在使用遞迴策略時,必須有乙個明確的遞迴結束條件,成為遞迴出口,否則將無限進行下去 遞迴的缺點 遞迴演...

演算法分析與設計 遞迴與尾遞迴

什麼是遞迴?遞迴最恰當的比喻,就是查詞典。我們使用的詞典,本身就是遞迴,為了解釋乙個詞,需要使用更多的詞。當你查乙個詞,發現這個詞的解釋中某個詞仍然不懂,於是你開始查這第二個詞,可惜,第二個詞裡仍然有不懂的詞,於是查第三個詞,這樣查下去,直到有乙個詞的解釋是你完全能看懂的,那麼遞迴走到了盡頭,然後你...

演算法分析與設計3 遞迴

任何乙個可以用計算機求解的問題所需的計算時間都與其規模n有關。問題的規模越小,越容易直接求解,解題所需的計算時間也越少。分治法的設計思想是,將乙個難以直接解決的大問題,分割成一些規模較小的相同問題,以便各個擊破,分而治之。如果原問題可分割成k個子問題 1 k n 且這些子問題都可解,並可利用這些子問...