当前位置:首页 C++ > 正文

【内部资料】C++实现字符串逆向输出的递归代码

作者:野牛程序员:2023-11-20 09:25:57 C++阅读 2635

以下是用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. 入栈和出栈过程的模拟:


  2. 1. reversePrint("Hello, World!")

  3.    - 入栈:reversePrint("Hello, World!")

  4.      - 入栈:reversePrint("ello, World!")

  5.        - 入栈:reversePrint("llo, World!")

  6.          - 入栈:reversePrint("lo, World!")

  7.            - 入栈:reversePrint("o, World!")

  8.              - 入栈:reversePrint(", World!")

  9.                - 入栈:reversePrint(" World!")

  10.                  - 入栈:reversePrint("World!")

  11.                    - 入栈:reversePrint("orld!")

  12.                      - 入栈:reversePrint("rld!")

  13.                        - 入栈:reversePrint("ld!")

  14.                          - 入栈:reversePrint("d!")

  15.                            - 入栈:reversePrint("!")

  16.                                   reversePrint("")  // 递归调用,基本情况,递归结束

  17.                            - 出栈:reversePrint("!"),输出:"!"

  18.                          - 出栈:reversePrint("d!"),输出:"d"

  19.                        - 出栈:reversePrint("ld!")

  20.                      - 出栈:reversePrint("rld!")

  21.                    - 出栈:reversePrint("orld!")

  22.                  - 出栈:reversePrint("World!")

  23.                - 出栈:reversePrint(" World!")

  24.              - 出栈:", reversePrint(World!")

  25.            - 出栈:reversePrint("o, World!")

  26.          - 出栈:reversePrint("lo, World!")

  27.        - 出栈:reversePrint("llo, World!")

  28.      - 出栈:reversePrint("ello, World!")

  29.    - 出栈:reversePrint(""Hello, World!")

    在出栈的过程中,每一级的 putchar(*str); 语句都会输出当前字符。在这里,每一级的 *str 都指向对应的字符,因此输出的字符就是字符串的逆向顺序。


    在递归过程中,当递归调用结束并程序开始返回时,我们会逐级回到调用栈的上一层。在这个过程中,每一级对应一个递归调用。而在每一级的返回过程中,执行的 putchar(*str); 语句会输出当前字符,也就是该级递归调用的字符。

    在你的例子中,递归函数 reversePrint 的核心是将字符串指针移动到下一个字符,并在递归的基本情况(字符串为空)时结束。当程序从基本情况开始返回时,每一级的 cout << *str; 语句都会输出相应级别的字符。这是因为每一级的 *str 都指向字符串中的一个字符,而 cout 用于将字符输出到标准输出流。因此,在整个递归调用过程中,逐级回溯时cout << *str; 就会输出字符串的字符,从而实现字符串的逆向输出。


    野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
    野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
    相关推荐

    最新推荐

    热门点击