我试图编写一个递归检查堆栈中负数的函数,然后在最后返回计数。到目前为止,该功能无法正常工作。我认为循环结构有问题。任何帮助将不胜感激!
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;
}
答案 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
来执行此操作。
(但它在面向对象编程中并不合适。)