填空题 以下程序的输出结果是{{U}} {{U}} {{/U}} {{/U}}。 main() { int x=0; sub(&x,8,1); printf("%d/n",x); } sub(int *a,int n,int k) { if(k<=n)sub(a,n/2,2*k); *a+=k; }
  • 1、
【正确答案】 1、7    
【答案解析】在主函数中定义了一个变量x并赋初值0,然后执行函数调用语句,该语句的执行过程为sub(&x,8,1)调用sub(&a,4,2),sub(&a,4,2)调用sub(&a,2,4),sub(&a, 2,4)中由于2<4,所以if后面括号里的判断为假,递归结束,执行其后的*a+=k;语句此时x=x+k=0+4=4,回推到上一层调用函数sub(&x,4,2)中,执行后面的语句,x=x+k=4+2=6,在回推到最上一层调用函数sub(&x,8,1)执行后面的语句,x=x+k=6+1=7,所以最后输出7。