尝试在堆栈中递归检测负片

Trying to recursively detect negatives in a stack?

本文关键字:检测 递归 堆栈      更新时间:2023-10-16

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

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

我同意@Greg Hewgill。

将CCD_ 1置于函数之外是正常的。

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

将CCD_ 2放入递归函数中是一个异常。

但如果您仍然想这样做,可以使用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可以做到这一点。(但这在面向对象编程中是不合适的。)