非递归实现逆序题目:
用递归实现逆序字符数组,而不是逆序打印,并且不能使用C函数库中的字符串操作函数
比如字符数组 arr : abcdef,
逆序后,字符数组 arr : ffedcba
代码实现相信非递归的不用多说,这里就简单的画下图
// 字符数组逆序(非递归) #include递归实现逆序int My_strlen(char* string) { int count = 0; while (*string != ' ') { count++; string++; } return count; } void reverse_string(char* str) { int left = 0; int right = My_strlen(str) - 1; while (left < right) { char tmp = *(str + left); *(str + left) = *(str + right); *(str + right) = tmp; left++; right--; } } int main() { // 初始化字符数组 char arr[10] = "abcdef"; // 函数调用 reverse_string(arr); printf("%sn", arr); return 0; }
多个参数的递归 题目思路递归的总思想就是把大事化小
代码实现跟非递归的思想差不多,相信不需要多解释
#include只有一个参数的递归 题目思路#include void reverse_string(char* arr, int left, int right) { char tmp = *(arr + left); *(arr + left) = *(arr + right); *(arr + right) = tmp; if (left < right) { reverse_string(arr, left + 1, right - 1); } } int main() { // 初始化字符数组,变量 char arr[10] = "abcdef"; int left = 0; int right = strlen(arr) - 1; // 函数调用 reverse_string(arr, left, right); printf("%sn", arr); return 0; }
如图所示,递归实现可以想象为
a和f交换,再加上"bcde"
b和e交换,再加上"cd"
最后c和d交换
如图所示,
- 先把a存放到tmp里面,再把f放到a处
- 将’ ’放到f处(因为字符串是以’ ’为结束标志)
- 逆序数组bcde
- 逆序完bcde再把a放到f处
#include#include // 函数的实现 int My_strlen(char* string) { int count = 0; while (*string != ' ') { count++; string++; } return count; } void reverse_string(char* string) { char tmp = *string; int len = My_strlen(string) - 1; *string = *(string + len); *(string + len) = ' '; if (My_strlen(string + 1) > 1) { reverse_string(string + 1); } *(string + len) = tmp; } int main() { // 初始化字符数组 char arr[10] = "abcdef"; // 函数调用 reverse_string(arr); printf("%sn", arr); return 0; }



