问题描述
我一直在寻找一些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永远无法退出调用自身的循环!
并请记住,基于mid
和rsize
之一可能是奇数甚至是size == 0
和size == 1
的两个基本情况的事实:
if (size == 0)
{
return 0;
}
else if (size == 1)
{
return anArray[0];
}
是必需的