2013-08-03 28 views
0

在以下代码中,堆栈是否进入框架?如果num = 5。为什么我得到的输出为零..数字从5到1呢?如何让堆栈在函数调用中工作?

void rec(int num) 
{ 
    cout << num << endl; 
    if(num > 0) 
     return rec(num-1); 
    cout << "after" << num << endl; 
} 

它包括堆栈的概念吗?

+0

您可以尝试通过放置一些断点来调试该示例。 –

+0

你是什么意思,你得到的输出为零? 'rec(n)'应该从n打印所有数字到0,然后是“after0”。如果这没有发生在你身上,那就很奇怪了。 – sepp2k

回答

1

“为什么我得到的输出作为零”

看逻辑的,你发挥作用。 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

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; 
}