C 这个递归函数做什么

C 这个递归函数做什么,c,recursion,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条件不满足,它将无限期地继续执行?假设b

我正在做一些考试准备,其中一个问题是描述下面这段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条件不满足,它将无限期地继续执行?

假设
b
g()
返回数组
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 )