我具有以下功能:
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);
}
};