欢迎光临
我们一直在努力

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

一.限制条件分析  

既然是递归解决问题,那么就避不开地要讨论,递归的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。

赞(0)
未经允许不得转载:171主机测评 » C语言 用递归 实现 revserse_string 详解(附有画图)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址