目录
一.递归
1.限制函数只能传递一个参数(如:reverse_string(char * string))
//字符串逆序(递归实现)
#include<stdio.h>
int my_strlen(char* str)
{
int count = 0;
while (*str != '\0')
{
count++;
str++;
}
return count;
}
void reverse(char* str)
{
char tmp = *str;//1
int len = my_strlen(str);
*str = *(str + len - 1);//2
*(str+len - 1) = '\0';//3
if(my_strlen(str+1)>=2)
reverse(str+1);//4
*(str + len - 1) = tmp;
}
int main()
{
char arr[] = "abcdefg";
reverse(arr);
printf("%s\n", arr);
return 0;
}
2.函数不限制参数
//字符串逆序(递归实现)
#include<stdio.h>
int my_strlen(char* str)
{
int count = 0;
while (*str != '\0')
{
count++;
str++;
}
return count;
}
void reverse(char arr[], int left, int right)
{
if(left<right)
{
char tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
reverse(arr, left+1, right-1);
}
}
int main()
{
char arr[] = "abcdefg";
int left = 0;
int right = my_strlen(arr)-1;
reverse(arr, left, right);
printf("%s\n", arr);
return 0;
}
二.非递归
//字符串逆序(非递归实现)
#include<stdio.h>
int my_strlen(char* str)
{
int count = 0;
while (*str != '\0')
{
count++;
str++;
}
return count;
}
void reverse(char arr[])
{
int left = 0;
int right = my_strlen(arr) - 1;
while (left < right)
{
char tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
left++;
right--;
}
}
int main()
{
char arr[] = "abcdefg";
reverse(arr);
printf("%s\n", arr);
return 0;
}