c语言 为什么

来源:百度知道 编辑:UC知道 时间:2024/09/21 22:42:40
31.以下程序的输出结果是:
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;
}
A. 1 B.8 C.7 D.4
【答案】C.

首先,*a=0,n=8,k=1;
第一次判断:1<8,满足条件,递归调用sub()函数;
此时,*a=0,n=4,k=2;
第二次判断:2<4,满足条件,递归调用sub()函数;
此时,*a=0,n=2,k=4;
第三次判断:4<2,不满足条件,则依次返回调用的值,执行 *a+=k;语句;
第一次返回: *a=0+4=4; 此时,k=4;
第二次返回: *a=4+2=6; 此时,k=2;
第三次返回: *a=6+1=7; 此时,k=1;
故答案选 C

1,n=8,k=1满足条件递归
2,n=4,k=2满足条件递归
3,n=2,k=4不满足*a=4(k=4)
4,返回后*a=6(k=2)
5,返回后*a=7(k=1)