【发布时间】:2019-08-22 06:56:31
【问题描述】:
我无法理解这种递归的工作原理。 为什么输出显示:C B A 而不是 A B C?
void recur(const char* sth) {
if (*sth != 'D') {
recur(sth+1);
std::cout << *sth << std::endl;
}
}
int main(){
recur("ABCD");
}
一开始,我有'ABCD', 然后我用'BCD'递归调用,但同时不应该第一次调用recur函数打印'A'?
在递归调用中,recur函数应该再次递归调用'CD',但也需要第二次调用recur函数打印'B'
等等……
我确信即使函数调用自身,第一次调用也不会自动结束。
我知道你们中的一些人会推荐我使用调试器,但我没有找到任何可以帮助我理解这一点的东西,这就是我决定在这里寻求帮助的原因。
亲切的问候,
【问题讨论】:
-
"我知道你们中的一些人会推荐我使用调试器,但我没有找到任何可以帮助我理解这一点的东西" 请解释一下,如何逐行浏览你的代码,不会帮助你理解这一点?
-
因为您在打印任何内容之前进行了递归调用——就这么简单。
-
这是递归的绝妙例子!我们老 C/C++ 程序员把它当作主食,但对于新手来说,它是学习曲线的很大一部分!