You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

递归实现字符串逆序打印的代码工作原理解析请求

递归实现字符串逆序打印的代码工作原理解析

嘿,我来帮你拆解这段递归代码的工作逻辑,其实递归的核心就是「自己调用自己」,咱们一步步捋清楚,保证你能明白:

首先先明确几个前提:

  • C语言里的字符串是以'\0'(空字符,ASCII值为0)作为结束标记的
  • _putchar是和标准库putchar功能一样的自定义函数,作用就是输出单个字符

函数核心逻辑拆解

咱们先看完整的函数结构:

void _print_rev_recursion(char *s)
{
    if (*s > '\0')
    {
        _print_rev_recursion(s + 1);
        _putchar(*s);
    }
}

1. 递归的「递」阶段:走到字符串的末尾

函数一开始会判断*s > '\0'——意思是当前指针s指向的字符不是结束符,是有效的字符串字符。
如果条件成立,先执行_print_rev_recursion(s + 1):这里s + 1是利用指针算术,把指针往后移动一位,指向字符串的下一个字符。

举个具体例子,假设传入的字符串是"hello":

  • 第一次调用:s指向'h',条件成立,调用自己,s变成指向'e'
  • 第二次调用:s指向'e',条件成立,调用自己,s变成指向'l'
  • 第三次调用:s指向'l',条件成立,调用自己,s变成指向'l'
  • 第四次调用:s指向'l',条件成立,调用自己,s变成指向'o'
  • 第五次调用:s指向'o',条件成立,调用自己,s变成指向'\0'
  • 第六次调用:s指向'\0',*s > '\0'不成立,直接返回,「递」阶段结束

2. 递归的「归」阶段:从后往前打印字符

当走到字符串末尾(碰到'\0'),递归开始回溯,也就是从最后一次调用往回走,依次执行_putchar(*s):

  • 回到第五次调用:s指向'o',执行_putchar('o'),打印o,然后返回
  • 回到第四次调用:s指向'l',执行_putchar('l'),打印l,然后返回
  • 回到第三次调用:s指向'l',执行_putchar('l'),打印l,然后返回
  • 回到第二次调用:s指向'e',执行_putchar('e'),打印e,然后返回
  • 回到第一次调用:s指向'h',执行_putchar('h'),打印h,然后返回

最终输出就是olleh,完美实现了字符串的逆序打印!

关键知识点总结

  • 递归终止条件:必须要有一个停止递归的条件,这里就是*s等于'\0',否则会无限递归导致栈溢出
  • 执行顺序的重要性:先递归调用再打印,才能实现逆序;如果先打印再递归,那就是正序输出了
  • 指针移动:s + 1是让指针每次往后跳一个字符,从而遍历整个字符串

备注:内容来源于stack exchange,提问作者Abdurrahman Kabir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 12:14:11