簡單的C語言程式,包含遞迴。我對遞迴不是太懂,求詳解遞迴過程及結果。關鍵要的是遞迴過程

時間 2021-05-07 20:00:40

1樓:老馮文庫

分析過程:

根據遞迴函式分析:

p(w) = p(w-1) w p(w-1)有p(3) = p(2) 3 p(2)p(2) = p(1) 2 p(1)

p(1) = p(0) 1 p(0)

由於p(0)不會輸出任何字元,故

p(2) = p(0) 1 p(0) 2 p(0) 1 p(0)

= 1 2 1

p(3) = p(2) 3 p(2)

= 1 2 1 3 1 2 1

2樓:

函式-等價於 輸出

p(3)----p(2) 3 p(2)------1 2 1 3 1 2 1

p(2)----p(1) 2 p(1) ----- 1 2 1

p(1)----p(0) 1 p(0)-------1程式輸出:

1 2 1 3 1 2 1

3樓:匿名使用者

答案 1 2 1 3 1 2 1

這題遞迴的確有些繞,不過你可以在vc++中用跟蹤記憶體的方法看下遞迴的全過程

快速排序演算法在平均情況下的時間複雜度為 求詳解

4樓:匿名使用者

時間複雜度為o(nlogn) n為元素個數

1. 快速排序的三個步驟:

1.1. 找到序列中用於劃分序列的元素

1.2. 用元素劃分序列

1.3. 對劃分後的兩個序列重複1,2兩個步驟指導序列無法再劃分

所以對於n個元素其排序時間為

t(n) = 2*t(n/2) + n (表示將長度為n的序列劃分為兩個子序列,每個子序列需要t(n/2)

的時間,而劃分序列需要n的時間)

而 t(1) = 1 (表示長度為1的序列無法劃分子序列,只需要1的時間即可)

t(n) = 2^logn + logn * n (n被不斷二分最終只能二分logn次(最優的情況,每次選取

的元素都均分序列))

= n + nlogn

因此t(n) = o(nlogn)

以上是最優情況的推導,因此快速排序在最優情況下其排序時間為o(nlogn),通常平均情況

我們也認為是此值。

在最壞情況下其會退化為氣泡排序,t(n) = t(n - 1) + n (每次選取的元素只能將序列劃分為

一段,即自身是 最小元素或最大元素)

因此t(n) = n * (n-1) / 2 相當於o(n^2)

5樓:匿名使用者

時間複雜度為o(nlogn)n是多少元素

1。快速排序的三個步驟:

1.1。查詢序列用於劃分的序列中的元素

1.2元素劃分的序列

1.3 1,2兩個步驟的過程不斷重複,兩個序列劃分指導序列不能被細分

n個元素的排序條件為t(n)= 2 * t(n / 2個)+ n(表示序列分為兩個子序列中的n的長度,每個子序列需要到t(n / 2個)

時間除以

t(1)= 1(序列的長度不能被劃分為子序列,序列的n個)只需要1罐)

t(n)= 2 ^ logn + logn * n(n為不斷二分法最後只有兩點:logn(最佳,各選擇

平均序列的元素))

= n + nlogn

因此,t(n)= o(nlogn )

以上是派生的理想情況下,快速排序排序在最佳的情況下,時間為o(nlogn)通常平均

我們也相信,這個值。

在最壞的情況下,它會淪為氣泡排序,t(n)= t(n - 1個)+ n(每次選擇元素序列分為

一些,這是他們自己的元素是最小的或最大的元素)

t(n)= n *(n-1)/ 2,相當於為o(n ^ 2)

6樓:雨的恩惠

正如歸併排序一樣,快速排序也是遞迴的,因此,他的分析需要求解一個遞推公式。我們將對快速排序進行這種分析,假設有一個隨機的樞紐元(不用三數中值分割法),對一些小的檔案也不使用截止範圍。和歸併排序一樣,取t(0)=t(1)=1,快速排序的執行時間等於兩個遞迴呼叫的執行時間加上花費在分割上的限行時間(樞紐元的選取僅花費常數時間)。

我們得到基本的快速排序關係:

t(n)=t(i)+t(n-i-1)+cn

其中,i=|s1|是s1中的時間個數。我們還將考查三種情況。

最壞情況的分析:

樞紐元始終是最小元素。此時i=0,如果我們忽略無關緊要的 t(0)-1,那麼遞推關係為

t(n0=t(1)+c(sum+=i;i in (2,n])= o(n^2)

最好情況:

在最好的情況下,樞紐元正好位於中間,t(n)=o(n* log(n))

平均情況的分析:

t(n)=o(n*logn)

《資料結構與演算法分許(c語言描述)》 片段,字太多了,全是公式推導,打了一部分

7樓:郝霞佛念

快速排序時間複雜度下界為o(nlogn),最壞情況為o(n^2)

快速排序的平均時間複雜度為o(nlogn)。

簡單的c語言程式,一個簡單的c語言程式

很多程式都是非常簡單的 1.輸入2個正整數m和n,求其最大公約數和最小公倍數 include include int main 3.程式設計計算從1到10各數階乘的和,即1 2 3 9 10 的和 include int main void printf 1到10各數階乘的和 d n sum ret...

簡單的C 程式,簡單的C 程式

include include using namespace std define maxn 1000 struct studentstu maxn int main while 1 stu maxn int main while 1 if i n cout 沒找到!n return 0 其實上面...

簡單的微控制器程式求助(c語言)

這是4 4的矩陣鍵盤的程式,8位數碼管依次顯示按下的鍵碼的,希望對你有用!我不懂可以hi我 include include code unsigned char table 共陰數碼管 0 9 空 code unsigned char key tab 17 unsigned char l tmpda...