【发布时间】:2021-08-13 04:51:36
【问题描述】:
所以我正在尝试学习 c++,我已经达到了递归的主题,并且遇到了一个问题。
void myfun(int n)
{
if(n>0)
{
myfun(n-1);
cout<<n<<endl;
}
else
{
cout<<"Stop"<<endl;
}
}
int main()
{
int n = 5;
myfun(n);
}`
程序的输出是这样的:
stop
1
2
3
4
5
我的问题是,既然if语句总是假的,那么在base call之后,函数如何以相反的方式调用自己,函数不应该就结束了吗?
【问题讨论】:
-
如果你传入
5,第一次会是真的……然后递归地再传4次。基本情况完成后,函数 返回 到递归调用之前的位置,从而打印值。 -
最里面的函数调用确实返回了,调用它的那些还没有完成,因为他们还没有打印出数字。在递归调用之前移动
cout<<n<<endl;。 -
你能解释一下为什么你认为那是“总是假的”吗?
-
我想我现在明白了,所以在基本调用之后,函数返回 1 步返回到调用打印值的位置,因为递归调用现已完成,因此按降序给出值,因为函数将返回到进行递归调用以完成 if 语句的位置。