Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 简单函数中的递归_C++_Recursion - Fatal编程技术网

C++ 简单函数中的递归

C++ 简单函数中的递归,c++,recursion,C++,Recursion,我有以下功能: void test(const char *nap){ if (*nap != 'D'){ test(nap+1); std::cout << *nap; }}; 我以为我会得到的输出是:ABC,但实际上,它的CBA。有人能告诉我哪里出错吗?你说的顺序不对。重申: test(nap+1); std::cout << *nap; 测试(nap+1); std::难道你叫它的顺序不对吗。重申: test(nap+1); std::cout

我有以下功能:

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

我以为我会得到的输出是:
ABC
,但实际上,它的
CBA
。有人能告诉我哪里出错吗?

你说的顺序不对。重申:

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

std::难道你叫它的顺序不对吗。重申:

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

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

换句话说,您的函数一直在调用自己,直到到达字符串的末尾。在这一点上,它返回到它自己调用的位置,下一步是打印当前字符

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

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

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

void test(const char *nap) {
    if (*nap != 'D'){
        std::cout << *nap;
        test(nap+1);
    }
};
无效测试(常量字符*nap){
如果(*nap!=“D”){

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

换句话说,你的函数一直在调用自己,直到它到达字符串的末尾。在那个时候,它返回到它调用自己的地方,下一步就是打印当前字符

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

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

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

void test(const char *nap) {
    if (*nap != 'D'){
        std::cout << *nap;
        test(nap+1);
    }
};
无效测试(常量字符*nap){
如果(*nap!=“D”){

std::cout因为std::cout在调用递归()之后

测试(nap+1);

std::cout因为std::cout在调用递归()之后

测试(nap+1);

STD:在打印之前,栈被解散,你调用递归。所以,第一个打印的是“代码> C <代码>,堆栈解开一个,打印<代码> b>代码>等等。@主页,哦,好的。我是C++初学者,不知道它是这样工作的。在FACI中递归地画出什么是有帮助的。NG问题及其行为。@ ChiefTwoPencils,你能把你的评论扩展成答案吗?@ UKSZ——这个视频解释了递归是如何工作的,栈在你打印之前调用递归。所以,第一个打印的是“代码> C <代码>,堆栈展开一个,打印<代码> B/C++ >等等。ginner,他不知道它是这样工作的。在纸上画出递归在遇到行为问题时发生了什么是很有帮助的。@ChiefTwoPencils,你能把你的评论扩展成答案吗?@uksz-这段视频解释了递归是如何工作的
test(nap+1);
std::cout << *nap;
 std::cout << *nap;
 test(nap+1);