我具有以下功能:

void test(const char *nap){
if (*nap != 'D'){
    test(nap+1);
    std::cout << *nap;
}};


当我用以下命令调用该函数时:

"ABCD"


我以为我会得到的输出是:ABC,但实际上是它的CBA。谁能向我解释我在哪里犯错?

最佳答案

您的递归是转到文本字符串的末尾,然后向后打印每个字符。

换句话说,您的函数会不断调用自身,直到到达字符串末尾为止。此时,它返回到它自己的位置,下一步是打印当前字符。

然后返回到它自己再次调用的位置,下一步是打印当前字符。

结果是您通过递归调用遍历字符串直到字符串的结尾。一旦到达字符串末尾,便开始展开一系列递归调用。在每次返回时,您都将打印当前字符。

尝试以下操作,它将打印当前字符,然后调用自身以打印下一个字符。当到达字符串末尾时,它将展开递归调用。

void test(const char *nap) {
    if (*nap != 'D'){
        std::cout << *nap;
        test(nap+1);
    }
};

08-27 10:04