使用 D&C 算法对数组元素求和会给出错误的输出

Posted

技术标签:

【中文标题】使用 D&C 算法对数组元素求和会给出错误的输出【英文标题】:Summing Array Elements Using D&C algorithm gives wrong output 【发布时间】:2021-11-29 03:17:51 【问题描述】:

你能告诉我这段代码有什么问题吗?我试图创建一个函数,该函数使用 D&C 算法计算数组元素的总和,但总是给我错误的输出。

public static long getSum(long arr[], int left, int right, long sum) 

    if (left<=right) 
        if (left==right) 

            return sum + arr[right];
        
        int mid = (left + right) / 2;
        return  getSum(arr,  left+ 1, mid,sum + arr[left])  + getSum(arr, mid + 1, right, sum + arr[left]);
    
    return 0;

public static void main(String[] args)
    long[] n = 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20;
    int l = 0, r = n.length-1;
    long result = getSum(n,l,r,0);
    System.out.print(result);

【问题讨论】:

【参考方案1】:

arr[left] 被添加了两次,这需要修复,以便递归调用看起来像:

...
return arr[left] + getSum(arr, left + 1, mid,   sum) 
                 + getSum(arr,  mid + 1, right, sum);

此外,还可以将right 索引处的元素添加到同一行的总和中并减少该索引:

return arr[left]  + getSum(arr, left + 1, mid, sum) 
     + arr[right] + getSum(arr,  mid + 1, right - 1, sum);

【讨论】:

以上是关于使用 D&C 算法对数组元素求和会给出错误的输出的主要内容,如果未能解决你的问题,请参考以下文章

使用 D&C/递归的最大子数组

求一个PHP计算数组内元素的不同组合,请看案例

编写程序,求二维数组中的全部元素之和(用指针实现)

用c语言求一个n阶方阵的所有元素之和,并给出算法的时间复杂度

js-FCC算法-Symmetric Difference

如何求两个数组的交集??