【减治法的设计思想】
减治法(reduce and conquer method )将原问题分解为若干个子问题,且原问题(规模为n )的解与子问题(规模通常为n/2或n-1 )的解之间存在某种确定的关系,该关系通常表现为
(1)原问题的解只存在于小规模子问题之一;
)原问题的解与任意一个小规模的解之间存在某种对应关系。
【问题描述】利用减治法对一维数组求和
输入:加法对象数列a[]和加法区间[L,R]
输出: a[L]~a[R]之和
【算法描述】
输入:加法对象数列a[]和加法区间[L,R]
输出: a[L]~a[R]之和
当L==R时,表示相加区间中只有一个数据,返回该数据,该算法结束;
2 .递归调用thesum(a )、l、R-1 )得到a(l )~a(r-1 )之和lsum
返回lsum a[R],算法结束;
【算法实现】
# include stdio.hintthesum (inta [ ],int L,int R ) ) if(l==r ) return a[L]; //L==R表示只有一个数据intlsum=thesum(A,l,R-1 )。 //递归调用和返回lsum a [ r ]; (}int main ) ) {int a[100]; int L,r; int n; printf ('请输入数字个数) ); scanf('%d ',n ); printf ('请输入要合计的区间:'); scanf('%d%d ),l,r ); printf ('请输入要合计的数组:'); for(intI=0; i n; I ) Scanf('%d ',a[i]; (intsum=thesum(a,l,r ); printf('%d ',sum ); } 【实例说明】
如果PS:有错误,请指出。 谢谢你。