C++ 递归生成子集

C++ 递归生成子集,c++,C++,我试图为大小为3的特定布尔向量生成所有可能的子集。因此,应该有8个可能的子集: #include<iostream> #include<fstream> #include<string> #include<stdio.h> #include<stdlib.h> #include<vector> using namespace std; int n = 3; int mis(vector<bool> f,int

我试图为大小为3的特定布尔向量生成所有可能的子集。因此,应该有8个可能的子集:

#include<iostream>
#include<fstream>
#include<string>
#include<stdio.h>
#include<stdlib.h>
#include<vector>

using namespace std;
int n = 3;
int mis(vector<bool> f,int i){
        for(int j=0; j <f.size();j++)
            cout<<f[i]<<" ";
        cout<<endl; 
        f[i] = false;
        return mis(f,i+1);
        f[i] = true;
        return mis(f,i+1);
}

int main(){
    vector<bool> f;
    f.resize(n);
    int m = mis(f,0);
}

您没有递归的基本情况。打印完
endl
后,需要检查是否已完成:

...
cout << endl;
if (i == n)
    return;
...
。。。

事实上你犯了好几个错误。下面是正确的代码:

#include<iostream>
#include<fstream>
#include<string>
#include<stdio.h>
#include<stdlib.h>
#include<vector>

using namespace std;

int n = 3;

int mis(vector<bool> f, int i)
{
    if (i > n)
    {
        return 0;
    }
    else if (i == n)
    {
        for(int j = 0; j < n; j += 1)
        {
            cout << f[j] << " ";
        }
        cout << endl;
        return 1;
    }

    f[i] = false;
    int a = mis(f, i + 1);

    f[i] = true;
    int b = mis(f, i + 1);

    return a + b;
}

int main()
{
    vector<bool> f(n);
    int m = mis(f, 0);

    cout << "Total: " << m << endl;
}
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
int n=3;
int-mis(向量f,int-i)
{
如果(i>n)
{
返回0;
}
else如果(i==n)
{
对于(int j=0;j它是否在无限循环中运行。您的部分代码也是无法访问的。您的意思是要有一个if语句而不是赋值true/false吗?否,但我的解决方案不正确。我正在尝试为大小为3:000 111 110 101 011 001 010 100is
coutWouldn't f.size()的布尔向量生成所有可能的子集更合适吗?它现在可以工作了,但我不能生成大小为3的布尔向量的所有可能子集。你知道我如何修复它吗?我已经更新了我的帖子,指出了你所犯的一些错误。这可能有助于你理解为什么你的代码不能工作。
#include<iostream>
#include<fstream>
#include<string>
#include<stdio.h>
#include<stdlib.h>
#include<vector>

using namespace std;

int n = 3;

int mis(vector<bool> f, int i)
{
    if (i > n)
    {
        return 0;
    }
    else if (i == n)
    {
        for(int j = 0; j < n; j += 1)
        {
            cout << f[j] << " ";
        }
        cout << endl;
        return 1;
    }

    f[i] = false;
    int a = mis(f, i + 1);

    f[i] = true;
    int b = mis(f, i + 1);

    return a + b;
}

int main()
{
    vector<bool> f(n);
    int m = mis(f, 0);

    cout << "Total: " << m << endl;
}