C语言 用递归实现revserse_string详解(附有画图)

📅 2026/7/5 15:09:32 👁️ 阅读次数 📝 编程学习
C语言 用递归实现revserse_string详解(附有画图)

1.限制条件分析

既然是递归解决问题,那么就避不开地要讨论,递归的2个必要条件

1.存在限制条件,满足条件时不再继续递归。

2.每次递归都会逐渐向限制条件靠近

简单地回顾下必要条件,接下来要找到递归 “递下去” 和 “归回来” 这两个条件。

那么字符串逆序,怎么把它拆解成与原问题形似的,较小规模的问题呢?

分析:

逆序整个字符串可以理解为,交换2个最末端的元素 + revsere(剩下的字符)。

2.画图分析

这里我用 a b c e d f 来当例子。

大致画图分析:

具体实现画图分析:


依次类推,直到原来的字符串为倒序为止。

相信有了这2次具体步骤的画图,大家应该也明白了。

“递下去”的条件:当剩余字符串有 2个 或 2个以上 时,说明还有可以交换的元素,把 arr + 1 递出去。即 strlen ( arr ) >= 2。

“归回来”的条件:没有可以逆置地字符时,即只有一个字符或没有字符时。即 strlen ( arr )<=1火

strlen ( arr )=0。

3.具体代码实现以及代码版递归画图流程图:

void reverse_string(char* str) { char tmp = (*str); int len = strlen(str); *str = *(str + len - 1); //str+len-1是字符串最后一个字符的地址 *(str + len - 1) = '\0'; if (strlen(str + 1) >= 2) { reverse_string(str + 1); } *(str + len - 1) = tmp; } int main() { char arr[] = "abcdef"; reverse_string(arr); printf("%s", arr); return 0; }