我有以下功能:
void test(const char *nap){
if (*nap != 'D'){
test(nap+1);
std::cout << *nap;
}};
当我用:
调用该函数时"ABCD"
输出,我认为我会得到:ABC
,但实际上,它是CBA
。任何人都可以向我解释我在哪里犯错误吗?
答案 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);