一、思路分析
1.迭代法思路分析
2.递归法思路分析(参数非常非常有限条件下)
3.优化的递归法思路分析(足够的参数)
二、代码演示
//字符串逆序
#include <stdio.h>
#include <string.h>
//方法①循环法
void reverse1(char* arr,int sz)
{
int left = 0, right = sz - 2;
char t;
while (left <= right)
{
t = arr[left];
arr[left] = arr[right];
arr[right] = t;
left++;
right--;
}
}
//方法②递归(参数非常少的情况下,允许使用库函数strlen)
void reverse2(char* str)
{
char tmp = *str;
int len = strlen(str);
*str = *(str + len - 1);
*(str + len - 1) = '\0';
if (strlen(str + 1) >= 2)
reverse2(str + 1);
*(str + len - 1) = tmp;
}
//方法③递归法(足够的参数)
void reverse3(char* arr, int left,int right)
{
char tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;//这里就不需要将字符串赋零了
if(left<right)
reverse3(arr, left + 1, right - 1);
}
int main()
{
char arr1[] = "abcdef";
char arr2[] = "abcdef";
char arr3[] = "abcdef";
int sz1 = sizeof(arr1) / sizeof(arr1[0]);
int sz2 = sizeof(arr2) / sizeof(arr2[0]);
int sz3 = sizeof(arr3) / sizeof(arr3[0]);
reverse1(arr1, sz1);
reverse2(arr2);
reverse3(arr3, 0, sz3 - 2);
printf("%s\n", arr1);
printf("%s\n", arr2);
printf("%s\n", arr3);
return 0;
}