主题:递归~~~
路过的朋友帮我看一下这个关于递归的题
它是给一个数组中的前K个元素倒置,
代码:
#include<stdio.h>
void invert(int a[],int k)
{int t;
if (k>1)
{invert(a+1,k-2);/*A处--注意看一下这儿的参数值*/
t=a[0];/*B--处*/
a[0]=a[k-1];
a[k-1]=t;
}
}
int main(void)
{int a[10]={5,4,3,2,1,6,7,8,9,10};
int k=5,i=0;
invert(a,k);
printf("now please print the a array's value:\n");
for (i=0;i<10;i++)
printf("%d ",a[i]);
return 0;
}
大家看下A处我们在调用的时候按a+1,k-2,第一次,a=a[1],k=3;
第二次,a=[2],k=1终止递归
再返回执行B处,为什么终止递归后第一次执行B处的时候a=a[0],k=5,好象是用的主函数调用invert(a,k)时a,k的值,
我相问的是:--------
为什么不是最后一次调用递归时的a[2],1啊,???
这种没有返回值的递归到底怎么个玩法儿啊???路过的朋友详解下谢谢
它是给一个数组中的前K个元素倒置,
代码:
#include<stdio.h>
void invert(int a[],int k)
{int t;
if (k>1)
{invert(a+1,k-2);/*A处--注意看一下这儿的参数值*/
t=a[0];/*B--处*/
a[0]=a[k-1];
a[k-1]=t;
}
}
int main(void)
{int a[10]={5,4,3,2,1,6,7,8,9,10};
int k=5,i=0;
invert(a,k);
printf("now please print the a array's value:\n");
for (i=0;i<10;i++)
printf("%d ",a[i]);
return 0;
}
大家看下A处我们在调用的时候按a+1,k-2,第一次,a=a[1],k=3;
第二次,a=[2],k=1终止递归
再返回执行B处,为什么终止递归后第一次执行B处的时候a=a[0],k=5,好象是用的主函数调用invert(a,k)时a,k的值,
我相问的是:--------
为什么不是最后一次调用递归时的a[2],1啊,???
这种没有返回值的递归到底怎么个玩法儿啊???路过的朋友详解下谢谢