这程序怎运行!*a+=k;什么意思?
main()
{
int x=0;
sub(&x,8,1);
printf("%d\n",x);
getch();
}
sub(int *a,int n,int k)
{
if(k<=n)
sub(a,n/2,2*k);
*a+=k;
}
请问这段程序的运行过程怎的??
还有*a+=k;这句的意思是什么??
问题点数:20、回复次数:3Top
1 楼hawkxjy(developer)回复于 2005-01-15 19:25:13 得分 20
sub(int *a,int n,int k)
{
if(k<=n) //递归终止条件
sub(a,n/2,2*k); //循环递归
*a+=k; //递归函数实际上要执行的逻辑部分
}
所以,sub(&x,8,1);就是循环递归的过程,递归层次直到k<=n时结束。总共对sub函数递归了2层:
sub(&x, 8, 1)->sub(&x, 4, 2)->sub(&x, 2, 4)
各步相应骤执行结果:
7->6->4
x的最终结果为7
另外:*a+=k;因为a是一个int指针,所以首先解引用,然后在加k;相当于:
int t = *a;
t = t+k;
*a = t;Top
2 楼sun999(风子)回复于 2005-01-15 20:56:37 得分 0
明白啦!谢谢!Top
3 楼dongyuanzhang(阿林)回复于 2005-01-15 21:00:05 得分 0
hawkxjy(developer)
解释的不错,考察的是传址对本身值的影响和递归调用。Top




