![](/img/trans.png)
[英]How does the call stack unwinding process exactly work, for function calls? - C++
[英]How to get the stack to work in function calls?
以下代码中堆栈是否进入框架? 如果num = 5。 为什么我得到的输出为零..从5到1的数字呢?
void rec(int num)
{
cout << num << endl;
if( num > 0 )
return rec(num-1);
cout << "after" << num << endl;
}
它包括堆栈的概念吗?
“为什么我将输出设为零”
看一下你的逻辑。 if(num>0)
- return rec(num-1);
。
因此,对于每个大于0
,该函数将再次使用num-1
调用。
而且只有当num==0
您才可以进入此行
cout<<"after"<<num<<endl;
这意味着对于您将输入的每个数字,该函数将不执行任何操作,并在cout<<"after"<<num<<endl;
之前用number-1
再次调用自身cout<<"after"<<num<<endl;
行,最后一次它将不会再次调用self(因为num > 0
条件为false),并且它将输出0
。
如果要查看“返回值”,则可以执行以下操作:
void rec(int num)
{
cout << num << endl;
if( num > 0 )
rec(num-1);
cout << "after" << num << endl;
}
return rec(num-1);
从技术上讲是有效的,但是由于该函数实际上并未返回任何东西,因此它与编写相同:
if (num > 0)
{
rec(num-1);
return;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.