在以下代码中,堆栈是否进入框架?如果num = 5。为什么我得到的输出为零..数字从5到1呢?如何让堆栈在函数调用中工作?
void rec(int num)
{
cout << num << endl;
if(num > 0)
return rec(num-1);
cout << "after" << num << endl;
}
它包括堆栈的概念吗?
在以下代码中,堆栈是否进入框架?如果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;
也就是说每就会进入数,函数将什么都不做,之前number-1
再次调用自身的cout<<"after"<<num<<endl;
线,并在最后时间它不会再称它自己(因为num > 0
条件是错误的),它将打印0
。
如果你想看到的“返回值”,你可以做这样的事情:
void rec(int num)
{
cout << num << endl;
if(num > 0)
rec(num-1);
cout << "after" << num << endl;
}
的return rec(num-1);
在技术上是有效的,但因为该函数实际上并不返回soemthing,这是一样的写作:
if (num > 0)
{
rec(num-1);
return;
}
您可以尝试通过放置一些断点来调试该示例。 –
你是什么意思,你得到的输出为零? 'rec(n)'应该从n打印所有数字到0,然后是“after0”。如果这没有发生在你身上,那就很奇怪了。 – sepp2k