【发布时间】:2017-10-17 01:39:51
【问题描述】:
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 一样打印时它是如何工作的。
【问题讨论】:
-
如果你切换
cout和print(p-1),那么情况和现在一样,真的。为了到达底部的return;,它需要经过print(p-1),否则它永远不会完成。这里也是一样。 -
它确实在 if 处返回。但它确实返回到下一个更高的 print 调用,而不是 main。然后这个打印调用在它等待的地方继续。
-
如果您将
print(p-1)扩展为完整功能并查看会发生什么,您可能会发现它很有帮助