很糟糕的风格+很多的错误...
修改如下:
#include<iostream.h>
void sub(int *a,int n,int k);
int main()
{
int x = 0;
sub(&x,8,1);
cout<<x<<endl;
return 0;
}
void sub(int *a,int n,int k)
{
if(k<=n)
{
sub(a,n/2,2*k);
}
*a+=k;
}
答案是7。解释如下:
sub是一个递归函数,结束的条件是n的一半大于等于k的2倍;在本例中,n是8,k是1,第一次调用的时候k值是1,然后递归调用二次,每次递归的k值分别是2、4;整个过程*a+=k这条语句共执行三次,所以最终*a=1+2+4=7。程序实际是想找出符合递归条件的k值的和。ps:是不是有哪个数学公式是这样子描述的?