思路:设i,j一个指向头一个指向尾,每次调用将i++,j–,头不动,然后交换首尾,i>j结束。
递归方程:
i>j return
i<j t=a[i];
a[i]=a[j];
a[j]=t;
rev(a,i+1,j-1);
代码实现
运行环境:VS2017
#include<stdio.h>
void rev(int a[], int i, int k,int j)
{
int t;
if (i < k)
{
t = a[i];
a[i] = a[j];
a[j] = t;
rev(a, i + 1, k,j-1);
}
}
int main(void)
{
int i;
int a[8] = { 1,2,3,4,5 ,6,7,8};
rev(a, 0,2,7);
for (i = 0;i < 8;i++)
{
printf("%2d", a[i]);
}
printf("\n");
system("pause");
}
运行结果:
8 7 3 4 5 6 2 1
请按任意键继续. . .