題目:編寫一個程序,用遞歸的方法實現查找數組中的最大值。
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)第二種方法是使用遞歸,遞歸就是講大規模問題轉成小規模的相同問題,將數組看成第一個元素與后面的數組的最大值作比較,后面的數組求最大值又可以看成它的第一個元素與后面的數組最大值比大小,以此類推性,形成遞歸。第二種方法符合題目要求。