int maxSubArraySum(int arr[], int l, int h) { if (l == h) return arr[l]; int m = (l + h)/2; return max(maxSubArraySum(arr, l, m), maxSubArraySum(arr, m+1, h), maxCrossingSum(arr, l, m, h)); }
int maxSubArraySum(int arr[], int low, int hi) { //Base case: only 1 element if (low == hi) return arr[low]; // Find mid point int mid = (low + hi ) >>1; // Return the max of the following three sums: // a) max subarray sum in the left half from mid // b) max subarray sum in the right half from mid // c) max subarray such that the subarray crosses midpoint return max(maxSubArraySum(arr, low, mid),\ maxSubArraySum(arr, mid+1, hi),\ maxCrossingSum(arr, low, mid, hi) ); }