從語法角度看,遞迴是指函式自己呼叫自己的現象。遞迴還可以看作一種複雜問題的求解策略,對複雜問題只需給出遞迴邊界和遞迴關係,由此構造遞迴函式即可完成求解。本題要求以陣列元素排序問題為例,嘗試用遞迴的思想設計乙個用於由小到大排序的遞迴函式。
具體來說。假設存在乙個10個元素組成的一維整型陣列,主函式中完成陣列的輸入、排序函式的呼叫以及排序結果的輸出。要求同學們基於遞迴的策略自己設計乙個排序函式,實現陣列元素由小到大的排序,給出問題分析的過程、思路描述以及遞迴函式的**。
遞迴函式可參考如下結構設計,第乙個形式引數用來接收陣列名資訊,第二個形式引數代表陣列中待排序區間的左側元素下標,第三個形式引數代表待排序區間的右側元素下標。
void mysort(int a[10], int leftindex, int rightindex) //可參考的排序函式函式頭
主函式:
int
main()
解決思路1:
// 使用非遞迴的思路實現此演算法,遞迴與迴圈 在此處是可以交換使用的
#include
void
mysort
(int a,
int leftindex,
int rightindex)
;int
main()
scanf
("%d %d"
,&left,
&right)
;mysort
(a,left,right)
;for
(int i=
0;i<
10;i++
)printf
("%d "
,a[i]);
return0;
}void
mysort
(int a,
int leftindex,
int rightindex)
// 思路1:插入排序演算法 如果左邊等於右邊那麼就不用排序,否則的話就
a[k+1]
=temp;
}}
解決思路2:
// 使用非遞迴的思路實現此演算法,遞迴與迴圈 在此處是可以交換使用的
#include
void
mysort
(int a,
int leftindex,
int rightindex)
;int
main()
scanf
("%d %d"
,&left,
&right)
;mysort
(a,left,right)
;for
(int i=
0;i<
10;i++
)printf
("%d "
,a[i]);
return0;
}void
mysort
(int a,
int leftindex,
int rightindex)
// 思路2:使用遞迴對其進行排序,遞迴邊界是陣列元素長度為1時此時不需要排序,直接返回即可
else
return
;}
2020.06.24 第一次修改 10 排序4 統計工齡 20 分
給定公司n名員工的工齡,要求按工齡增序輸出每個工齡段有多少員工。輸入格式 輸入首先給出正整數n 10 5 即員工總人數 隨後給出n個整數,即每個員工的工齡,範圍在 0,50 輸出格式 按工齡的遞增順序輸出每個工齡的員工個數,格式為 工齡 人數 每項佔一行。如果人數為0則不輸出該項。輸入樣例 810 ...
10 排序4 統計工齡 20 分
給定公司n名員工的工齡,要求按工齡增序輸出每個工齡段有多少員工。輸入首先給出正整數n 10 5 即員工總人數 隨後給出n個整數,即每個員工的工齡,範圍在 0,50 按工齡的遞增順序輸出每個工齡的員工個數,格式為 工齡 人數 每項佔一行。如果人數為0則不輸出該項。8 10 2 0 5 7 2 5 20...
10 排序4 統計工齡 20 分
給定公司n名員工的工齡,要求按工齡增序輸出每個工齡段有多少員工。輸入首先給出正整數n 即員工總人數 隨後給出n個整數,即每個員工的工齡,範圍在 0,50 按工齡的遞增順序輸出每個工齡的員工個數,格式為 工齡 人數 每項佔一行。如果人數為0則不輸出該項。8 10 2 0 5 7 2 5 20 1 2 ...