void print(int p)
{
if (p==0)
{
return;
}
print(p-1);
cout<<p;
return;
}
这是一个基本函数,它从您输入的任何数字开始计数,因此如果您发送 6,它会打印 123456。
我已经盯着它看了半个小时了,但我不明白它是如何工作的。为什么递归调用 print(p-1);
不直接导致语句 if(p==0)
并在到达 cout<<p
之前返回?
cout<<p
是如何被访问的?我完全理解在递归调用之前放置 cout<<p;
并改为打印 654321 时它是如何工作的。
最佳答案
您似乎认为 return
总是返回到 main(或您调用 print 的任何地方),和/或递归调用会替换自身。这不是真的。
如果您调用 print(6)
,它当然会以 if
开头,然后继续 print(p-1);
。此时开始调用print(5)
,但之前的print(6)
仍然存在并等待print(5)
完成。
print(5)
做同样的事情,导致调用 print(4)
,print(5)
等待 打印(4)
。等等……
在某个时候,print(1)
调用 print(0)
,if
立即在另一个 之前结束该函数print
被调用。现在,当 print(0)
结束时,print(1)
继续其代码,即 cout
。之后,print(1)
结束,导致 print(2)
继续其工作,依此类推......
最后,当 print(5)
结束时,最顶层的嵌套调用 (print(6)
) 继续,并且在 cout
在其中,它可以返回到 main(或从其他调用它的地方)。
关于c++ - 对 C++ 中的基本递归感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46748823/