sub函数里的第一个参数是传址行参 main里的x会随着sub里的x的改变而跟着改变 main里的其他值不变
sub里还有个递归算法 当k<=n时 要再运行一遍sub函数 这时 sub里的参数又变了一次 直到k>n时 才运行*a+=k
例子楼上已经举的很详细了
所以答案是7
一楼回答的不对
应该是;
n=8 k=1
先递推sub(*a,8,1),sub(*a,4,2),sub(*a,2,4),注意在这个里k 每次都在改变.回朔的时候a=a+k=0+4=4,然后 a=a+k=4+2=6
:a=a+k=6+1=7,最后得到7
我想强调的是在递推的时候的顺序和回朔的顺序是相反的!
n=8 k=1
sub(*a,8,1)=sub(*a,4,2)=sub(*a,2,4):a=a+k=0+4=4
退回sub(*a,4,2):a=a+k=4+2=6
退回sub(*a,8,1):a=a+k=6+1=7
传地址值会变的,注意递归