我写了这段代码,输出没有按预期进行。该函数递归返回负数。但它并没有回归它应该是什么。
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
答案 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