简单函数中的递归

时间:2016-02-03 20:00:11

标签: c++ recursion

我有以下功能:

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

当我用:

调用该函数时
"ABCD"

输出,我认为我会得到:ABC,但实际上,它是CBA。任何人都可以向我解释我在哪里犯错误吗?

3 个答案:

答案 0 :(得分:4)

你以错误的顺序调用它。还原:

test(nap+1);
std::cout << *nap;
像这样

std::cout << *nap;
test(nap+1);

答案 1 :(得分:1)

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

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

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

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

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

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

答案 2 :(得分:0)

因为std :: cout在调用recursion()..

之后
test(nap+1);
std::cout << *nap;

这是父母在进食前给孩子喂食。

以下内容将获得您想要的内容:

 std::cout << *nap;
 test(nap+1);