如何计算负数?

时间:2014-10-14 21:43:00

标签: c++ data-structures stack

我写了这段代码,输出没有按预期进行。该函数递归返回负数。但它并没有回归它应该是什么。

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

    stack<int> mystack;
    mystack.push(9);
    mystack.push(-2);
    mystack.push(-2);
    mystack.push(1);
    mystack.push(-3);
    mystack.push(-1);
    mystack.push(99);
    mystack.push(-1);
    mystack.push(1);
    mystack.push(1);
    recursive_x(mystack);
 }

输出应为5,但它是这样的:

输出:

0
0
1
2
2
3
4
4
5
5
5

2 个答案:

答案 0 :(得分:2)

假设您确实调用了该函数,输出正是我所期望的。

显示屏显示堆栈中

处的负数
cout<<count<<endl;

被调用。

首先为最内层递归调用它,因为在为当前递归执行任何输出之前进行递归调用。

count+=recursive_x(mystack);
    }cout<<count<<endl;

如果您只想输出5,则可以打印初始调用返回的结果

int finalCount = recursive_x(mystack);
cout<<finalCount<<endl;

并删除recursive_x()中的输出。

答案 1 :(得分:1)

每次递归调用都会打印结果。 您只需将print命令移动到main:

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

    stack<int> mystack;
    mystack.push(9);
    mystack.push(-2);
    mystack.push(-2);
    mystack.push(1);
    mystack.push(-3);
    mystack.push(-1);
    mystack.push(99);
    mystack.push(-1);
    mystack.push(1);
    mystack.push(1);
    cout<<recursive_x(mystack)<<endl;
 }

输出:

5