我有赋值问题,我们需要在c ++中为数字实现递归排列。 这是部分工作的代码,但缺少一些数字。 我找不到问题所在。 这段代码确实有效,但不完全正确。 此代码采用数组和该数组的大小。 在这种情况下,我试图解决当我发送超过3个数字的数组时出现的问题。 如果我发送3个号码,输出是: ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我在递归方面遇到麻烦。 谁能告诉我如何将其转换为代码形式?
给定的vector <int>
的值为1,2,3,4,5 ,.
我想编写一个将所有值相互比较的函数。 我现在不在乎1 != 2
等于2 != 1
。
我很难递归
我保证这不是功课
编辑我想做的是整理时间表的事件。 我在同一天发生了多个事件,我想弄清楚时间表的所有排列
2嵌套的for循环将无法工作,因为我正在比较多个(> 2)值
event 1 @ 0100-0230, or @ 0200-0330
event 2 @ 1200-1500, or @ 0800-1100
event 3 @ 1200-1300, or @ 1300-1400, or @ 1400-1500
.
.
.
对于每个比较,我想找出那组事件是否相交。 我不是想找到所有不相交的事件
我想得到类似的输出
event 1 @ 0100-2300, event 2 @ 0800-1100, event 3 @ 1200-1300 // will be printed out
event 2 @ 0200-0330, event 2 @ 1200-1500, event 3 @ 1200-1300 // will be ignored
我猜您正在研究递归和迭代之间的关系。 通常,简单的迭代会转换为尾递归-递归调用是您要做的最后一件事,因此无需深度堆栈。
这有点伪代码,而且未经测试-但它应该可以工作。
void compareOne(int compareWith, iterator b, iterator e) {
if (b == e) return;
if (compareWith == *b) {
// do something
}
compareOne(compareWith, b+1, e);
}
void compareAll(iterator b, iterator e) {
if (b == e) return;
compareOne(*b, b+1, e);
compareAll(b+1, e);
}
我敢打赌这是家庭作业...但是我不明白为什么你需要递归:
for(int i = 0; i<v.size(); ++i)
{
for(int j = i+1; j < v.size(); ++j)
{
compare v[i] and v[j]
}
}
为什么需要递归? 简单的迭代就可以做到:
using namespace std;
vector<int> v;
...
for (int i = 0; i < v.size() - 1; i++)
for (int j = i + 1; j < v.size(); j++)
if (v[i] == v[j])
cout << "Oops" << endl;
或者您可以使用迭代器:
vector::const_iterator beforelast = v.end(); --beforelast;
for (vector::const_iterator i = v.begin(); i != beforelast; ++i)
for (vector::const_iterator j = i + 1; j != v.end(); ++j)
if (*i == *j)
cout << "Oops" << endl;
可以尝试递归解决问题:
bool f(vector<int>& v, int lastidx)
{
int lastval = v[lastidx];
for (int i = 0; i < lastidx; i++)
if (v[i] == lastval)
return false;
return f(v, lastidx - 1);
}
但是,我认为非递归解决方案更好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.