一.限制条件分析
既然是递归解决问题,那么就避不开地要讨论,递归的2个必要条件:
1.存在限制条件,满足条件时不再继续递归。
2.每次递归都会逐渐向限制条件靠近。
简单地回顾下必要条件,接下来要找到递归 “ 递下去 ” 和 “ 归回来 ” 这两个条件。
那么字符串逆序,怎么把它拆解成与原问题形似的,较小规模的问题呢?
分析:
逆序整个字符串可以理解为,交换2个最末端的元素 + revsere(剩下的字符)。
二.画图分析
这里我用 a b c e d f 来当例子。
大致画图分析:

具体实现画图分析:


依次类推,直到原来的字符串为倒序为止。
相信有了这2次具体步骤的画图,大家应该也明白了。
“递下去”的条件:当剩余字符串有 2个 或 2个以上 时,说明还有可以交换的元素,把 arr + 1 递出去。即 strlen ( arr ) >= 2。
“归回来”的条件:没有可以逆置地字符时,即只有一个字符或没有字符时。即 strlen ( arr )<=1火
strlen ( arr )=0。
三.具体代码实现以及代码版递归画图流程图:
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;
}


到了文章的最后,希望对你有所帮助,bye bye。