C 这个递归函数做什么
我正在做一些考试准备,其中一个问题是描述下面这段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
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 )