c - 理解递归函数

标签 c algorithm

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/

相关文章:

c - 为什么在 Linux 上使用 open 系统调用创建文件时会更改文件权限?

algorithm - 往返经纬度和3D点的可逆算法

algorithm - 英语句子与数据库中存储的一组英语句子的模糊匹配

c - 使用 malloc.c 的堆分配内存边界

转换包含十六进制数字的 char*

C:混淆一个整数

javascript - 树代码给出错误的输出。逻辑错误

algorithm - 计算每页的最佳项目数,以便给定范围的项目显示在索引最低的单个页面上

java - 遗传算法-收敛性

c - 链表程序崩溃