题目

编写递归函数实现字符串原地逆序反转(不借助额外数组空间)。

输入格式:一行输入一个待反转的字符串。

输出格式:输出反转后的字符串内容,末尾换行。

数据范围与约定:字符串长度不超过 500。

思路与算法

1. 递归参数设计
函数原型设计为 void reverse_str(char *s, int left, int right),传递首尾边界下标。

2. 双向对调与递归
递归基:当 left >= right 时终止递归;否则交换 s[left] 与 s[right],并向内层收缩递归 reverse_str(s, left + 1, right - 1)。

完整程序

#include <stdio.h>
#include <string.h>

// 递归反转字符串:交换首尾字符后,递归反转内部子串
static void rev(char *s, int i, int j)
{
    // 递归出口:双指针相遇或交叉
    if (i >= j) {
        return;
    }
    char t = s[i];
    s[i] = s[j];
    s[j] = t;
    // 推进指针边界
    rev(s, i + 1, j - 1);
}

int main(void)
{
    char s[500];
    if (scanf("%499s", s) != 1) {
        return 1;
    }
    rev(s, 0, (int)strlen(s) - 1);
    printf("%s\n", s);
    return 0;
}

运行示例

输入:

abcd

输出:

dcba