试图以递归方式检测堆栈中的负数?

时间:2014-10-14 02:12:35

标签: c++ loops recursion

我试图编写一个递归检查堆栈中负数的函数,然后在最后返回计数。到目前为止,该功能无法正常工作。我认为循环结构有问题。任何帮助将不胜感激!

   size_t r_appr(stack<int> mystack){       
        int count=0;
        if(!mystack.empty()){
            if(mystack.top()<0){
                count+=1;
            }
            mystack.pop();
            count+=r_appr(mystack);
        }
        return count;
    }

1 个答案:

答案 0 :(得分:0)

我同意@Greg Hewgill。

cout放在函数外面是正常的。

int main()
{
    stack<int> s;
    for (c=0; c<5; c++)
        s.push(c*-1);
    cout << r_appr(s);
}

cout放在递归函数里面是一个异常。

但如果您仍想这样做,可以使用global variable#define来实现。

以下是使用#define的示例:

#define stack_size 4
void r_appr(stack<int> mystack){
    int count=0;
    if(!mystack.empty()){
        if(mystack.top()<0){
            count+=1;
        }
        mystack.pop();
        count+=r_appr(mystack);
        if (mystack.size()==stack_size)
            cout << count << endl;
    }
}

int main()
{
    stack<int> s;
    for (c=0; c<=stack_size; c++)
        s.push(c*-1);
    r_appr(s);
}

如果您希望堆栈大小是变量,请使用global variable来执行此操作。 (但它在面向对象编程中并不合适。)