分而治之和算法

问题描述

我一直在寻找一些D&C算法,并发现了这个算法

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;
} 

但是每次我在没有基本情况的情况下运行代码时,它都会返回段错误错误。 我试图弄清楚为什么这种基本情况如此重要,以至于即使运行n> 1仍然返回错误,有人也会在这里伸出援手?

解决方法

由于函数sumArray递归调用自身,

    int lsum = sumArray(anArray,mid);
    int rsum = sumArray(anArray + mid,rsize);

无论数组大小如何,都需要基本情况​​。否则,Fnction永远无法退出调用自身的循环! 并请记住,基于midrsize之一可能是奇数甚至是size == 0size == 1的两个基本情况的事实:

    if (size == 0)
    {
        return 0;
    }
    else if (size == 1)
    {
        return anArray[0];
    }

是必需的

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...