C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 对整数数组求和的除法和征服算法大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我在分治算法方面遇到了一些麻烦,并且正在寻求一些帮助.我正在尝试编写一个名为sumArray的函数来计算整数数组的总和.

函数必须通过将数组分成两半并在每一半上执行递归调用来完成.我尝试使用类似的概念来编写递归求和算法时使用的概念,以及用于识别数组中最大元素的分而治之算法,但我正在努力将这两个想法结合起来.

下面是我为sumArray编写的代码,它编译但不返回正确的结果.

int sumArray(int anArraY[],int sizE)
{
    int @R_879_10586@l = 0;
    //base case
    if (size == 0)
    {
        return 0;
    }
    else if (size == 1)
    {
        return anArray[0];
    }

    //divide and conquer
    int mid = size / 2;
    int lsum = anArray [mid] + sumArray(anArray,--mid);
    int rsize = size - mid;
    int rsum = anArraY[size - mid] + sumArray(anArray + mid,--rsizE);
    return lsum + rsum;
}

我已经将问题确定为函数在计算rsum时包含lsum的值.我知道问题在于我使用rsize对sumArray的递归调用(一个等于原始数组大小的变量,减去中点).但是,出于某种原因,我似乎无法确定修复方法.

觉得很傻,因为我知道答案是正确地盯着我,但是我如何修复我的功能便它返回准确的结果呢?

更新:感谢所有有用的响应,我已修复我的代码,以便它编译和运行良好.我会留下我原来的代码,以防其他人在分裂和征服中挣扎,并可能犯同样的错误.有关正确解决问题的函数,请参阅@Laura M的答案. @haris的回复也很好地解释了我的代码出现错误的地方.

解决方法

int sumArray(int anArraY[],int sizE)
{
    //base case
    if (size == 0)
    {
        return 0;
    }
    else if (size == 1)
    {
        return anArray[0];
    }

    //divide and conquer
    int mid = size / 2;
    int rsize = size - mid;
    int lsum = sumArray(anArray,mid);
    int rsum = sumArray(anArray + mid,rsizE);
    return lsum + rsum;
}

大佬总结

以上是大佬教程为你收集整理的c – 对整数数组求和的除法和征服算法全部内容,希望文章能够帮你解决c – 对整数数组求和的除法和征服算法所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。