【内部资料】C++实现字符串逆向输出的递归代码
以下是用C++实现字符串逆向输出的递归代码:
#include <iostream>
void reversePrint(const char *str) {
if (*str == '\\0') {
return; // 基本情况:字符串为空,递归结束
} else {
reversePrint(str + 1); // 递归调用,移动到下一个字符
std::cout << *str; // 输出当前字符
}
}
int main() {
const char *str = "Hello, World!";
reversePrint(str);
std::cout << std::endl;
return 0;
}在递归调用的过程中,每次递归调用都会将当前函数的信息(参数、局部变量等)保存在栈中,然后在递归结束时将这些信息弹出栈。在这个过程中,递归函数 reversePrint 的参数是一个指向字符串的指针 char *str,并且在每一次递归调用时通过 str + 1 将指针移动到下一个字符。
详细解释为什么第一次输出是 "!",而第二次输出是 "d":
入栈和出栈过程的模拟:
1. reversePrint("Hello, World!")
- 入栈:reversePrint("Hello, World!")
- 入栈:reversePrint("ello, World!")
- 入栈:reversePrint("llo, World!")
- 入栈:reversePrint("lo, World!")
- 入栈:reversePrint("o, World!")
- 入栈:reversePrint(", World!")
- 入栈:reversePrint(" World!")
- 入栈:reversePrint("World!")
- 入栈:reversePrint("orld!")
- 入栈:reversePrint("rld!")
- 入栈:reversePrint("ld!")
- 入栈:reversePrint("d!")
- 入栈:reversePrint("!")
reversePrint("") // 递归调用,基本情况,递归结束
- 出栈:reversePrint("!"),输出:"!"
- 出栈:reversePrint("d!"),输出:"d"
- 出栈:reversePrint("ld!"),
- 出栈:reversePrint("rld!"),
- 出栈:reversePrint("orld!"),
- 出栈:reversePrint("World!"),
- 出栈:reversePrint(" World!"),
- 出栈:", reversePrint(World!"),
- 出栈:reversePrint("o, World!"),
- 出栈:reversePrint("lo, World!"),
- 出栈:reversePrint("llo, World!"),
- 出栈:reversePrint("ello, World!"),
- 出栈:reversePrint(""Hello, World!"),
在出栈的过程中,每一级的 putchar(*str); 语句都会输出当前字符。在这里,每一级的 *str 都指向对应的字符,因此输出的字符就是字符串的逆向顺序。
在递归过程中,当递归调用结束并程序开始返回时,我们会逐级回到调用栈的上一层。在这个过程中,每一级对应一个递归调用。而在每一级的返回过程中,执行的 putchar(*str); 语句会输出当前字符,也就是该级递归调用的字符。
在你的例子中,递归函数 reversePrint 的核心是将字符串指针移动到下一个字符,并在递归的基本情况(字符串为空)时结束。当程序从基本情况开始返回时,每一级的 cout << *str; 语句都会输出相应级别的字符。这是因为每一级的 *str 都指向字符串中的一个字符,而 cout 用于将字符输出到标准输出流。因此,在整个递归调用过程中,逐级回溯时cout << *str; 就会输出字符串的字符,从而实现字符串的逆向输出。

- 上一篇:c语言递归反向输出字符串
- 下一篇:c++递归算法经典实例之计算阶乘
