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

递归反转句子中char变量存储机制与字符迭代原理问询

递归反转句子的char变量疑问解答

核心先明确:这段代码根本没存整个字符串

你定义的char sentence;是单个字符变量,不是字符串。字符串需要用char[](字符数组)或者char*(字符指针)来存,但这里的逻辑是靠递归的栈帧,把每个字符分开存到每一层调用的单独变量里,最后回溯输出实现反转。


1. 为什么不用方括号/大括号也能处理字符串?

方括号是用来定义字符数组(存多个字符)的,而这里的char sentence每次只存一个输入的字符。整个字符串并没有被一次性存储,而是:

  • 每调用一次swap_recursion(),就会在栈上创建一个属于当前层的sentence变量,存刚读的那个字符;
  • 这些变量各自独立,直到递归触底(读到\n),才会从最后一层开始依次输出每个sentence里的字符,拼起来就是反转后的句子。

2. 它是怎么“遍历”下一个字符的?

这里没有用for/while循环迭代,全靠递归的调用顺序实现:

  • 第一次调用swap_recursion(),scanf读第一个字符,比如输入hello\n,第一个字符是h;
  • 因为h不是换行符,立刻递归调用自身,读第二个字符e;
  • 重复这个过程,直到某次scanf读到\n,这时条件不满足,当前层递归直接结束;
  • 开始回溯:回到上一层(存着o的那层),执行printf输出o;
  • 再回到上一层(存着l的那层),输出l;
  • 以此类推,直到回到最开始的第一层,输出h,最终得到olleh。

简单说,递归的栈就像叠盘子,每读一个字符叠一个,碰到换行就从最上面的盘子开始挨个拿出来,自然就反转了。


附上你的代码方便对照:

#include <stdio.h>

void swap_recursion();

int main() {

    printf("Input a sentence: ");
    swap_recursion();

    return 0;
}

void swap_recursion(){
    char sentence;

    scanf("%c", &sentence);
    if (sentence != '\n'){
        swap_recursion();
        printf("%c", sentence);

    }

}

内容的提问来源于stack exchange,提问作者Snowie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 23:47:21