请大家解释一下这个递归的过程

来源:百度知道 编辑:UC知道 时间:2024/06/09 11:59:34
用递归的方法把数组中的N个数按倒的次序重新排列
void reverse(int a[],int n){
int t,i;

if (n==1) return;
t=a[0];
for ( i=0;i<n-1;i++)
a[i]=a[i+1]; ----完全不明白怎么样递归法
a[n-1]=t;
reverse(a,n-1); ---不明白过程请高手说说这递归过程
}
void main(){
int a[10],i;
for ( i=0;i<10;i++)
a[i]=2*i;
reverse(a,10);
for (i=0;i<10;i++)
printf("%d\n",a[i]); getch();
}

void reverse(int a[],int n){ 这是一个用来倒序的递归,传进来的是一个整形的数组 a[] n为这个数组需要处理元素的长度,即将第一个元素换到哪个位置
int t,i;
if (n==1) return; //如果已经完成就退出递归
     t=a[0]; 让变量t等于这个需要倒序的数组的第一个元素
     for ( i=0;i<n-1;i++) 循环
        a[i]=a[i+1]; 每个元素都往前移动一位
     a[n-1]=t; 最后一位即为第一个

此时 第一个元素已经放到了数组的最后
如果说刚开始的时候数组的元素为a[] ={0,1,2}的话,那么经过一次这个算法的时候a[]={1,2,0}
此时因为已经将最前的一个弄到了最后面,所以最后面的那个元素我们就不对它做处理了
这里的处理方式就是,本来数组长度为3,但我对它倒序的时候我只倒序前面的2个元素
即n-1,就好像此时将a[]={1,2}传到这个方法里面,此时的a[]数组中第一个元素已经是原来数组的第二个元素,所以要将它的第一个元素放到原来数组的倒数第二个位置,n-1就做到了这步,每执行一次这个方法需要处理的元素都会减少一个,直到最后一个元素交换完成,即数组元素需要处理的元素为1
reverse(a,n-1);
}