1、直接利用递归:
- package programmer;
- import java.util.Scanner;
- /*
- * 利用递归算法求最大值
- */
- public class MaxRecursion {
- public int maxRecursion(int[] A, int low, int high) {
- if (low > high)
- return -1;
- else {
- if (A[low] < maxRecursion(A, low + 1, high))
- return maxRecursion(A, low + 1, high);
- else
- return A[low];
- }
- }
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- int N = sc.nextInt();
- int[] A = new int[N];
- for (int i = 0; i < A.length; i++)
- A[i] = sc.nextInt();
- System.out.println(new MaxRecursion().maxRecursion(A, 0, A.length - 1));
- }
- }
- package programmer;
- import java.util.Scanner;
- /*
- * 利用二分查找法递归寻找数组中的最大值
- */
- public class MaxBinarySearch {
- public int maxBinarySearch(int[] A, int low, int high) {
- if (low > high)
- return -1;
- else {
- int mid = (low + high) / 2;
- int tmp = maxBinarySearch(A, low, mid - 1) > maxBinarySearch(A,
- mid + 1, high) ? maxBinarySearch(A, low, mid - 1)
- : maxBinarySearch(A, mid + 1, high);
- return tmp > A[mid] ? tmp : A[mid];
- }
- }
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- int N = sc.nextInt();
- int[] A = new int[N];
- for (int i = 0; i < A.length; i++)
- A[i] = sc.nextInt();
- System.out.println(new MaxBinarySearch().maxBinarySearch(A, 0,
- A.length - 1));
- }
- }
但是复杂度并没有减少,只是提供一种新的思考方法。