递归输出集合子集
答案:2 悬赏:20
解决时间 2021-11-17 01:52
- 提问者网友:残阳碧曼
- 2021-11-16 15:40
必须用递归 不要贴代码 具体说一下思路 不写代码也可以
最佳答案
- 二级知识专家网友:开心就好
- 2021-11-16 16:09
思路: 对于某个集合元素 e 和某个子集subset, e要不就在这个集合中,要不就不在。 故,只需枚举所有元素的在或不在某子集, 即可枚举所有子集。
不标准伪代码: 不妨设集合元素为 e[0] 到 e[n-1] 共n个, 用数组 flag[0] 到 flag[n-1] 代表i元素是否在当前集合
void Output( i )
{
if ( i == 集合元素个数n)
{
根据flag数组输出当前集合(在或不在);
return;
}
flag[i] = 在当前集合;
Output(i + 1);
flag[i] = 不在当前集合;
Output(i + 1);
}
初始化时 flag[0] 到flag[n-1]都为 ‘不在当前集合’;
初始调用 Output(0);
不标准伪代码: 不妨设集合元素为 e[0] 到 e[n-1] 共n个, 用数组 flag[0] 到 flag[n-1] 代表i元素是否在当前集合
void Output( i )
{
if ( i == 集合元素个数n)
{
根据flag数组输出当前集合(在或不在);
return;
}
flag[i] = 在当前集合;
Output(i + 1);
flag[i] = 不在当前集合;
Output(i + 1);
}
初始化时 flag[0] 到flag[n-1]都为 ‘不在当前集合’;
初始调用 Output(0);
全部回答
- 1楼网友:不服输就别哭
- 2021-11-16 17:31
int i=0;
fun(集合)
{
if(集合.length>0)
{
cout<<集合[i];
集合=集合.remove(集合[i++]);
fun(集合);
}
}
ps:干吗用递归啊,循环不是更简单明了?
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯
• 手机登qq时,显示手机磁盘不足,清理后重新登 |
• 刺客的套装怎么选啊? |