1.解题思路
(1)将这组数等分为两组(两组数的个数可能差1),分别求这两组数的和;
(2)递归分解直到每组数的元素个数<=2,可简单解决两个数以内的和问题;
(3)递归出口:如果只有一个数,则直接返回这个数。
2.伪代码描述
getsum(a,i,j)
{
if i==j then { return a[i];}
else if i==j-1 then { return a[i]+a[j];}
else
{
mid=(i+j)/2;
return getsum(a,i,mid)+getsum(a,mid+1,j);
}
}
3.源程序
#include<stdio.h>
#define N 3
int getsum(int *a,int i,int j)
{
int mid;
if(i==j)
return a[i];
else if(i==j-1)
return a[i]+a[j];
else
{
mid=(i+j)/2;
return getsum(a,i,mid)+getsum(a,mid+1,j);
}
}
void main()
{
int c,i;
int a[N];
printf("输入N个数(在头文件自己定义N的大小):");
for(i=0;i<N;i++)
{
scanf("%d",&a[i]);
}
c=getsum(a,0,N-1);
printf("最后分治法求的和为:%d\n",c);
}