使用 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 算法对数组元素求和会给出错误的输出的主要内容,如果未能解决你的问题,请参考以下文章