递归函数,使用位掩码c ++显示集合的所有子集
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归函数,使用位掩码c ++显示集合的所有子集相关的知识,希望对你有一定的参考价值。
我正在尝试编写一个递归函数来使用位掩码显示n元素集的所有可能的k元素子集。
到目前为止,我有这个代码。
#include <iostream>
using namespace std;
void combinations(int *, int, int, int,int c);
int main()
{
int n = 5;
int k = 3;
int bitMask[5] = {0};
combinations(bitMask,0,n,k,0);
}
void combinations(int* arr, int start, int n, int k,int c)
{
if(c==3)
{
for(int i = 0; i < n; i++)
{
cout<<arr[i];
}
cout<<endl;
}else
{
for(int i = start; i < n; i++)
{
arr[i] = 1;
combinations(arr,i+1,n,k,c+1);
}
}
}
但是我的输出是:
11100
11110
11111
11111
11111
11111
11111
11111
11111
11111
有人可以给我一些关于如何更改函数的指导,以获得这样的结果
11100
11010
11001
10110
10101
01110
01101
01011
00111
提前谢谢,我对递归仍然不好。
下面的代码完美无缺。
#include <iostream>
using namespace std;
void combinations(int *, int, int, int,int c);
int main()
{
int n = 5;
int k = 3;
int bitMask[5] = {0};
combinations(bitMask,0,n,k,0);
}
void combinations(int* arr, int start, int n, int k,int c)
{
if(c==3)
{
for(int i = 0; i < n; i++)
{
cout<<arr[i];
}
cout<<endl;
}else
{
for(int i = start; i < n; i++)
{
arr[i] = 1;
combinations(arr,i+1,n,k,c+1);
arr[i] = 0;
}
}
}
答案
你忘了
arr[i] = 0;
从递归combinations()
返回后。
以上是关于递归函数,使用位掩码c ++显示集合的所有子集的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C 编程中使用 fgets 编写返回文本文件所有内容的函数?
C - 用来显示所有接口的pcap_findalldevs卡在了一个无限循环中。
使用python CDLL加载dll,但c代码中没有函数显示
编写一个函数func(),将此函数的输入参数(int型)逆序输出显示,如54321 –> 12345,要求使用递归,并且函数体代码不超过8行