經典算法詳解(11)遞歸查找數組中的最大值


題目:編寫一個程序,用遞歸的方法實現查找數組中的最大值。

C++實現

 1 #include<iostream>
 2 
 3 using namespace std;
 4 //第一種方法是常規方法,不是使用遞歸,首先將第一個元素的值賦值給max,然后遍歷數組,
 5 //當遇到超高max的值時將其賦值給max,最后就將得到最大值
 6 int getMax_fir(int *arr,int n) {
 7     int max = arr[0];
 8     for (int i = 1; i < n; i++) {
 9         if (max < arr[i])
10             max = arr[i];
11     }
12     return max;
13 }
14 
15 //第二種方法是使用遞歸,遞歸就是講大規模問題轉成小規模的相同問題,將數組看成第一個元素與后面的數組的最大值作比較,
16 //后面的數組求最大值又可以看成它的第一個元素與后面的數組最大值比大小,以此類推性,形成遞歸
17 int getMax_sec(int *arr, int n) {
18     if (n == 1)    //設置終止條件
19         return arr[0];
20     int tem = getMax_sec(arr + 1, n - 1);    //指針加一表示下一個元素開始
21     if (arr[0] > tem)
22         return arr[0];
23     else
24         return tem;
25 }
26 
27 int main(int argc, char *argv[]) {
28     int arr[10] = { 2,4,5,65,2,8,2,5,6,55 };
29     cout << getMax_fir(arr, 10) << endl;
30     cout << getMax_sec(arr, 10)<<endl;
31     getchar();
32     return 0;
33 }

說明:

(1)第一種方法是常規方法,不是使用遞歸,首先將第一個元素的值賦值給max,然后遍歷數組,當遇到超高max的值時將其賦值給max,最后就將得到最大值。

(2)第二種方法是使用遞歸,遞歸就是講大規模問題轉成小規模的相同問題,將數組看成第一個元素與后面的數組的最大值作比較,后面的數組求最大值又可以看成它的第一個元素與后面的數組最大值比大小,以此類推性,形成遞歸。第二種方法符合題目要求。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM