发布网友 发布时间:2022-04-22 00:06
共2个回答
热心网友 时间:2023-07-14 06:44
答案是:7。
被调函数sub是一个递归函数,有两处注意点:
一、参数1这里传递的是实参x的地址,因此sub函数中a地址里的值改变,x的值也变。
二、注意sub中if没有大括号,作用域仅限下一句代码,也就说*a+=k;这句代码是在if作用域之外的。无论if判读成不成立,*a+=k;都会执行。
所以按照递归顺序执行:
第一层:n的值为8,k的值为1。执行代码:sub(x地址,4,2);x+=1;(*a的值就是x的值)
第二层:n的值为4,k的值为2。执行代码:sub(x地址,2,4);x+=2;
第三层:n的值为2,k的值为4。执行代码:x+=4;
递归函数中自调后的代码是从最底层往开始执行,一层一层往回返回的。
所以实际执行顺序是:x+=4;x+=2;x+=1。
x初值0,所以是7。
热心网友 时间:2023-07-14 06:45
这是一个递归算法,会把每一次k的值都加起来
调用sub(一共三次)
sub( , 8, 1)
sub( , 4, 2)
sub ( , 2, 4)
因此x = 4+2+1 =7
随后输出7