这个递归函数做了什么

时间:2014-04-17 23:03:00

标签: c recursion

我正在做一些考试准备,其中一个问题是描述以下C代码的作用。

int g(int *a, int b ,int c){
if(b==c) return a[b];
return g(a,b,(b+c)/2) + g(a,(b+c)/2+1 ,c);}

根据我对左手总和的理解,似乎无法弄清楚递归 是系列b + 2 ^ n / 2 * c的总和,并且系列的总和是(2 ^ n / 2)*(b + c),其中n从0开始。但是n没有值将使系列分别等于b或c。这是否意味着如果第一个if条件不满足,它将继续为无穷大?

1 个答案:

答案 0 :(得分:2)

假设b < cg()将数组a[]的元素总和从索引b返回到索引c(包括两者)

换句话说,

g( a, b, c ) := 

int sum = 0;
for( int i = b; i <= c; ++i )
    sum += a[ i ];
return sum;

编辑证明草图

Assume c - b = n

(b + c)/2
= (c - b + 2b)/2
= (c - b)/2 + b
= b + n/2

Thus, g( a, b, (b + c)/2 ) + g( a, (b + c)/2 + 1, c )
= g( a, b, b + n/2 ) + g( a, b + n/2 + 1, c )