题目描述:
完成一个递归程序,倒置字符数组。并打印实现过程
递归逻辑为:
当字符长度等于1时,直接返回
否则,调换首尾两个字符,在递归地倒置字符数组的剩下部分
分析:
不妨设字符数组为s;
则由题干分析可知:
当数组s的长度为1时,直接返回数组(也就是是s[0]);
当数组s的长度不为1时,将数组对称式互换(第一个和最后一个,第二个和倒数第二个,以此类推,直至到达数组s中间)
输入格式
字符数组长度及该数组
输出格式
在求解过程中,打印字符数组的变化情况。
最后空一行,在程序结尾处打印倒置后该数组的各个元素。
样例输入复制
5 abcde
样例输出复制
ebcda
edcbaedcba
#include <stdio.h>
#include <string.h>
void reverse(char *s,int left,int right,int n)
{
if(left==right||left>(n-1)/2)//到达"中间"停止交换
return ;
//交换关于数组"中间"对称的两个元素的值
char temp=s[left];
s[left]=s[right];
s[right]=temp;
//打印字符数组的变化情况
puts(s);
//左右两边向中间"走"
reverse(s,left+1,right-1,n);
}
int main()
{
char s[1000];
int n;
scanf("%d%s",&n,&s);
reverse(s,0,n-1,n);
printf("\n%s",s);
return 0;
}