如何让堆栈在函数调用中工作?

时间:2013-08-03 13:20:02

标签: c++

堆栈是否在以下代码中进入框架?如果num = 5。为什么我的输出为零...... 5到1的数字怎么样?

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

它是否包含堆栈的概念?

2 个答案:

答案 0 :(得分:1)

  

“为什么我的输出为零”

看看你的功能逻辑。 if(num>0) - return rec(num-1);
因此,对于0以上的每个nubmer,该函数将仅使用num-1再次调用自身 只有num==0你才会到达这一行

cout<<"after"<<num<<endl;

意味着对于您输入的每个数字,该函数将不执行任何操作,并在number-1之前使用cout<<"after"<<num<<endl; 再次调用自己行,并且最后一次不要再调用它自己(因为num > 0条件为假)并且它将打印0

答案 1 :(得分: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;
}