我正在尝试编写一个函数,以递归方式检测堆栈中的负整数。目前下面的代码片段就是我所拥有的,但到目前为止还没有给出正确的答案。我测试了一堆11个元素和7个底片并获得了下面给出的输出。循环结构肯定有问题,但我还没能找到并修复它。任何帮助将不胜感激!
12356657235681623569772357137235729723574562357617235777623579372358096
我的功能如下:
size_t r_func(stack<int> st1)
{
if(st1.size() == 0) return 0;
int r = st1.top();
st1.pop();
cout << (r<0)+r_func(st1);
}
答案 0 :(得分:1)
size_t r_func(stack<int> st1)
{
if(st1.size() == 0) return 0;
int r = st1.top();
st1.pop();
cout << (r<0)+r_func(st1);
}
r_func
应该返回size_t
,但如果st1.size()
不为零,那么它将不会返回任何内容。编译器应该给你一个警告!
要更正此问题,请添加一行以返回堆栈中的负数:
...
st1.pop();
const size_t neg_count = (r < 0) + r_func(st1);
cout << neg_count;
return neg_count;
}
修改:要编写此tail-recursively,有必要跟踪累加器中的大小(此处称为neg_accum
):
size_t r_func(stack<int> st1, size_t neg_accum = 0)
{
if (st1.size() == 0) {
cout << neg_accum;
return neg_accum;
}
int r = st1.top();
st1.pop();
return r_func(st1, (r < 0) + neg_accum);
}
答案 1 :(得分:0)
正如Rufflewind所说,你应该替换'cout&lt;&lt;'使用'return'并以这种方式调用您的函数:'cout&lt;&lt; r_func(ST1);'