如何利用递归的方式实现字符串反序

img

arr[len - 1] = tmp;这行代码为什么会在if语句后面,递归的时候tmp储存的值不会丢失吗? 可不可以写到if语句前面?

不会丢,因为每一次的调用会分配独立的存储空间给局部变量。
不能换。提前后字符串后续要处理的子串就不是以\0结尾了,也就无法正常换序


#include <iostream>
void reverse_str (char *p);
int main ()
{
    char str[100];
    gets (str);
    reverse_str (str);
    return 0;
}
void reverse_str (char *p)
{
    if(*p)
    {
        reverse_str (p+1);
        putchar (*p);
    }
}

供参考:

#include <stdio.h>
void reverse(char* str)
{
    char* p = str, c;
    while (*p) p++;
    p--;
    if (str < p) {
        c = *str;
        *str = *p;
        *p = '\0';
        reverse(str + 1);
        *p = c;
    }
}
int main()
{
    char buf[100];
    scanf("%s", buf);
    reverse(buf);
    printf("%s\n", buf);
    return 0;
}
 

递归啊,搜索完要恢复数据,继续搜!
希望对题主有帮助!