int Max_Subarray_Sum(int arr[], int n)
{
if(n == 1)
{
return arr[0]; // what it will be return for right Sub array
}
int m = n / 2;
int left_MSS = Max_Subarray_Sum(arr, m);
int right_MSS = Max_Subarray_Sum(arr + m, n - m); // why arr+m will d0
int leftsum = INT_MIN, rightsum = INT_MIN, sum = 0;
for(int i = m; i < n; i++)
{
sum += arr[i];
rightsum = max(rightsum, sum);
}
sum = 0;
for(int i = (m-1); i >= 0; i--)
{
sum += arr[i];
leftsum = max(leftsum,sum);
}
}
这段代码看不懂,arr+m会做什么。
请帮助我。
提前致谢。
最佳答案
您可以将arr
视为指向整数数组起点的指针。 arr + m
表示数组中第 m
个元素的地址,所以这基本上是将数组分成两部分:
对数组的前 m
个元素调用递归函数:
int left_MSS = Max_Subarray_Sum(arr,m);
对数组的最后 n-m
个元素调用递归函数:
int right_MSS = Max_Subarray_Sum(arr+m,n-m);
关于c - 理解递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25720180/