C++ 使用deque和递归C+创建所有可能的组合+;

C++ 使用deque和递归C+创建所有可能的组合+;,c++,recursion,C++,Recursion,我有一个包含一系列数字{0,1,2,3,4,5,6},我正在尝试使用递归创建这些数字的所有可能组合 这是我目前的代码 void combination(vector<node> &comb, deque<node> &numbers) { if (numbers.empty()) { for (unsigned int i = 0; i < comb.size(); i++) { cout <&

我有一个包含一系列数字
{0,1,2,3,4,5,6}
,我正在尝试使用递归创建这些数字的所有可能组合

这是我目前的代码

void combination(vector<node> &comb, deque<node> &numbers) {

    if (numbers.empty()) {
        for (unsigned int i = 0; i < comb.size(); i++) {
            cout << comb[i].id << " ";
        }
        cout << "\n";
        return;
    }

    comb.push_back(numbers.front());
    numbers.pop_front();
    combination(comb, numbers);
    comb.pop_back();
    combination(comb, numbers);
}
为什么函数不能打印出所有可能的组合


另外,这就是我想要使用的-一个包含数字的deque和一个包含每个组合的向量。

您使用的是通过引用传递,我做了一些小的更改,它可以工作

代码:

#include <bits/stdc++.h>
using namespace std;

void combination(vector<int> comb, deque<int> numbers) {

    if (numbers.empty()) {
        for (unsigned int i = 0; i < comb.size(); i++) {
            cout << comb[i] << " ";
        }
        cout << "\n";
        return;
    }

    comb.push_back(numbers.front());
    numbers.pop_front();
    combination(comb, numbers);
    comb.pop_back();
    combination(comb, numbers);
}

int main() {
    // your code goes here
    vector<int> comb;
    deque<int> numbers;
    for(int i = 0;i < 7;i++) numbers.push_back(i);
    combination(comb, numbers);
    return 0;
}
#包括
使用名称空间std;
无效组合(向量梳、德克数){
if(number.empty()){
for(无符号整数i=0;i您使用的是passby-reference,我做了一些小的修改,效果很好

代码:

#include <bits/stdc++.h>
using namespace std;

void combination(vector<int> comb, deque<int> numbers) {

    if (numbers.empty()) {
        for (unsigned int i = 0; i < comb.size(); i++) {
            cout << comb[i] << " ";
        }
        cout << "\n";
        return;
    }

    comb.push_back(numbers.front());
    numbers.pop_front();
    combination(comb, numbers);
    comb.pop_back();
    combination(comb, numbers);
}

int main() {
    // your code goes here
    vector<int> comb;
    deque<int> numbers;
    for(int i = 0;i < 7;i++) numbers.push_back(i);
    combination(comb, numbers);
    return 0;
}
#包括
使用名称空间std;
无效组合(向量梳、德克数){
if(number.empty()){
for(无符号整数i=0;i我可以假设这是一个学校练习或其他学习经验吗?否则你应该改为使用。我用它来实现一个问题的分支定界方法。因此,我不能使用
next\u permutation
同样,你在这里发布的代码不会编译。我假设应该调用
permute
ins代替
组合
组合。向后推(…)
应该是
梳。向后推(…)
?@CantrianBear不是一个有用的答案。如果是这样的话,这个网站就没有意义了。我显然不知道为什么它没有达到我预期的效果,这是最后的手段。你通过引用传递
数字。在到达的第一个叶子上,它变为空()好的。我假设这是一个学校练习或其他学习经验?否则你应该改为使用。我用它来实现一个问题的分支定界方法。因此,我不能使用
next\u permutation
,而且,你在这里发布的代码也不会编译。我假设应该调用该函数
permute
而不是
composition
composition.push_back(…)
应该是
comb.push_back(…)
?@CantrianBear不是一个有用的答案。如果是这样的话,这个网站就没有意义了。我显然不知道为什么它没有达到我预期的效果,这是最后的手段。你通过引用传递
数字。在到达的第一个叶子上,它变为空()好的。有人在我的帖子上评论说,只有deque需要通过值传递,但这也是一个好答案。有人在我的帖子上评论说,只有deque需要通过值传递,但这也是一个好答案。