編制遞歸演算法
A. 中級程序員考什麼
今年我報了名,是5月20日考試。
今年更改了名稱,取消了中級程序員。是這樣的:
初級資格:程序員 (原初級程序員)
中級資格:程序設計師,評測師(原高級程序員)
高級資格:系統分析師
考試內容:
程序員:
1)掌握數據及其轉換、數據的機內表示、算術和邏輯運算,以及相關的應用數學基礎知識;
(2)理解計算機的組成以及各主要部件的性能指標;
(3)掌握操作系統、程序設計語言的基礎知識;
(4)熟練掌握計算機常用辦公軟體的基本操作方法;
(5)熟練掌握基本數據結構和常用演算法;
(6)熟練掌握C程序設計語言,以及C++、Java、Visual Basic中的一種程序設計語言;
(7)熟悉資料庫、網路和多媒體的基礎知識;
(8)掌握軟體工程的基礎知識,了解軟體過程基本知識、軟體開發項目管理的常識;
(9)了解常用信息技術標准、安全性,以及有關法律、法規的基本知識;
(10)了解信息化、計算機應用的基礎知識;
(11)正確閱讀和理解計算機領域的簡單英文資料。
程序設計師考試要求:
(1)掌握數據表示、算術和邏輯運算;
(2)掌握相關的應用數學、離散數學的基礎知識;
(3)掌握計算機體系結構以及各主要部件的性能和基本工作原理;
(4)掌握操作系統、程序設計語言的基礎知識,了解編譯程序的基本知識;
(5)熟練掌握常用數據結構和常用演算法;
(6)熟悉資料庫、網路和多媒體的基礎知識;
(7)掌握C程序設計語言,以及C++、Java、Visual Basic、Visual C++其中一種程序設計語言;
(8)熟悉軟體工程、軟體過程改進和軟體開發項目管理的基礎知識;
(9)熟練掌握軟體設計的方法和技術;
(10)掌握常用信息技術標准、安全性,以及有關法律、法規的基本知識;
(11)了解信息化、計算機應用的基礎知識;
(12)正確閱讀和理解計算機領域的英文資料。
如果你以後專攻C++的話,把C的基礎打好就可以了,不用學的那麼精通,但一定要打好基礎。
B. 用遞歸方法寫出有序數組的二分查找演算法
什麼是二分查找?
二分查找也稱折半查找(Binary Search),它是一種效率較高的查找方法。但是,折半查找要求線性表必須採用順序存儲結構,而且表中元素按關鍵字有序排列。
二分查找優缺點
優點是比較次數少,查找速度快,平均性能好;
其缺點是要求待查表為有序表,且插入刪除困難。
因此,折半查找方法適用於不經常變動而查找頻繁的有序列表。
使用條件:查找序列是順序結構,有序。
過程
首先,假設表中元素是按升序排列,將表中間位置記錄的關鍵字與查找關鍵字比較,如果兩者相等,則查找成功;否則利用中間位置記錄將表分成前、後兩個子表,如果中間位置記錄的關鍵字大於查找關鍵字,則進一步查找前一子表,否則進一步查找後一子表。重復以上過程,直到找到滿足條件的記錄,使查找成功,或直到子表不存在為止,此時查找不成功。
利用循環的方式實現二分法查找
public class BinarySearch {
public static void main(String[] args) {
// 生成一個隨機數組 int[] array = suiji();
// 對隨機數組排序 Arrays.sort(array);
System.out.println("產生的隨機數組為: " + Arrays.toString(array));
System.out.println("要進行查找的值: ");
Scanner input = new Scanner(System.in);
// 進行查找的目標值 int aim = input.nextInt();
// 使用二分法查找 int index = binarySearch(array, aim);
System.out.println("查找的值的索引位置: " + index);
}
/** * 生成一個隨機數組 *
* @return 返回值,返回一個隨機數組 */
private static int[] suiji() {
// random.nextInt(n)+m 返回m到m+n-1之間的隨機數 int n = new Random().nextInt(6) + 5;
int[] array = new int[n];
// 循環遍歷為數組賦值 for (int i = 0; i < array.length; i++) {
array[i] = new Random().nextInt(100);
}
return array;
}
/** * 二分法查找 ---循環的方式實現 *
* @param array 要查找的數組 * @param aim 要查找的值 * @return 返回值,成功返回索引,失敗返回-1 */
private static int binarySearch(int[] array, int aim) {
// 數組最小索引值 int left = 0;
// 數組最大索引值 int right = array.length - 1;
int mid;
while (left <= right) {
mid = (left + right) / 2;
// 若查找數值比中間值小,則以整個查找范圍的前半部分作為新的查找范圍 if (aim < array[mid]) {
right = mid - 1;
// 若查找數值比中間值大,則以整個查找范圍的後半部分作為新的查找范圍 } else if (aim > array[mid]) {
left = mid + 1;
// 若查找數據與中間元素值正好相等,則放回中間元素值的索引 } else {
return mid;
}
}
return -1;
}}
運行結果演示:
總結:
遞歸相較於循環,代碼比較簡潔,但是時間和空間消耗比較大,效率低。在實際的學習與工作中,根據情況選擇使用。通常我們如果使用循環實現代碼只要不是太繁瑣都選擇循環的方式實現~
C. 璁$畻鏈轟簩綰у叕鍏卞熀紜鐭ヨ瘑鐢ㄥ埌鏁板﹀悧錛
鏈夌敤鍒版暟瀛︼紝浣嗕笉鏄寰堝
璁$畻鏈轟簩綰у叕鍏卞熀紜鐭ヨ瘑鎬葷粨
鏁版嵁緇撴瀯涓庣畻娉
1.1 綆楁硶
綆楁硶錛氭槸鎸囪В棰樻柟妗堢殑鍑嗙『鑰屽畬鏁寸殑鎻忚堪銆
綆楁硶涓嶇瓑浜庣▼搴忥紝涔熶笉絳夎$畻鏈烘柟娉曪紝紼嬪簭鐨勭紪鍒朵笉鍙鑳戒紭浜庣畻娉曠殑璁捐°
綆楁硶鐨勫熀鏈鐗瑰緛錛氭槸涓緇勪弗璋ㄥ湴瀹氫箟榪愮畻欏哄簭鐨勮勫垯錛屾瘡涓涓瑙勫垯閮芥槸鏈夋晥鐨勶紝鏄鏄庣『鐨勶紝姝ら『搴忓皢鍦ㄦ湁闄愮殑嬈℃暟涓嬬粓姝銆傜壒寰佸寘鎷錛
錛1錛夊彲琛屾э紱
錛2錛夌『瀹氭э紝綆楁硶涓姣忎竴姝ラら兘蹇呴』鏈夋槑紜瀹氫箟錛屼笉鍏呰告湁妯℃1涓ゅ彲鐨勮В閲婏紝涓嶅厑璁告湁澶氫箟鎬э紱
錛3錛夋湁絀鋒э紝綆楁硶蹇呴』鑳藉湪鏈夐檺鐨勬椂闂村唴鍋氬畬錛屽嵆鑳藉湪鎵ц屾湁闄愪釜姝ラゅ悗緇堟錛屽寘鎷鍚堢悊鐨勬墽琛屾椂闂寸殑鍚涔夛紱
錛4錛夋嫢鏈夎凍澶熺殑鎯呮姤銆
綆楁硶鐨勫熀鏈瑕佺礌錛氫竴鏄瀵規暟鎹瀵硅薄鐨勮繍綆楀拰鎿嶄綔錛涗簩鏄綆楁硶鐨勬帶鍒剁粨鏋勩
鎸囦護緋葷粺錛氫竴涓璁$畻鏈虹郴緇熻兘鎵ц岀殑鎵鏈夋寚浠ょ殑闆嗗悎銆
鍩烘湰榪愮畻鍜屾搷浣滃寘鎷錛氱畻鏈榪愮畻銆侀昏緫榪愮畻銆佸叧緋昏繍綆椼佹暟鎹浼犺緭銆
綆楁硶鐨勬帶鍒剁粨鏋勶細欏哄簭緇撴瀯銆侀夋嫨緇撴瀯銆佸驚鐜緇撴瀯銆
綆楁硶鍩烘湰璁捐℃柟娉曪細鍒椾婦娉曘佸綊綰蟲硶銆侀掓帹銆侀掑綊銆佸噺鏂楅掓帹鎶鏈銆佸洖婧娉曘
綆楁硶澶嶆潅搴︼細綆楁硶鏃墮棿澶嶆潅搴﹀拰綆楁硶絀洪棿澶嶆潅搴︺
綆楁硶鏃墮棿澶嶆潅搴︽槸鎸囨墽琛岀畻娉曟墍闇瑕佺殑璁$畻宸ヤ綔閲忋
綆楁硶絀洪棿澶嶆潅搴︽槸鎸囨墽琛岃繖涓綆楁硶鎵闇瑕佺殑鍐呭瓨絀洪棿銆
1.2 鏁版嵁緇撴瀯鐨勫熀鏈鍩烘湰姒傚康
鏁版嵁緇撴瀯鐮旂┒鐨勪笁涓鏂歸潰錛
錛1錛夋暟鎹闆嗗悎涓鍚勬暟鎹鍏冪礌涔嬮棿鎵鍥烘湁鐨勯昏緫鍏崇郴錛屽嵆鏁版嵁鐨勯昏緫緇撴瀯錛
錛2錛夊湪瀵規暟鎹榪涜屽勭悊鏃訛紝鍚勬暟鎹鍏冪礌鍦ㄨ$畻鏈轟腑鐨勫瓨鍌ㄥ叧緋伙紝鍗蟲暟鎹鐨勫瓨鍌ㄧ粨鏋勶紱
錛3錛夊瑰悇縐嶆暟鎹緇撴瀯榪涜岀殑榪愮畻銆
鏁版嵁緇撴瀯鏄鎸囩浉浜掓湁鍏寵仈鐨勬暟鎹鍏冪礌鐨勯泦鍚堛
鏁版嵁鐨勯昏緫緇撴瀯鍖呭惈錛
錛1錛夎〃紺烘暟鎹鍏冪礌鐨勪俊鎮錛
錛2錛夎〃紺哄悇鏁版嵁鍏冪礌涔嬮棿鐨勫墠鍚庝歡鍏崇郴銆
鏁版嵁鐨勫瓨鍌ㄧ粨鏋勬湁欏哄簭銆侀摼鎺ャ佺儲寮曠瓑銆傜瓑絳