0%

对于递归求解N个元素的所有子集代码

双递归

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <string.h>
#include <iostream>
#define MAX 10000
using namespace std;

void build(char str[],int n)
{
if(n==0)//控制输出
{
cout<<"{";
for(int i=0;i<strlen(str);++i)
if(str[i]!=' ')
{
cout<<str[i];
}
cout<<"}"<<endl;
}
else
{
/*** 先递归 ***/
build(str,n-1);//当 n=0之后执行下一步;
//cout<<n<<endl;测试
char newstr[5] = {' '};//去掉就把该位置的元素置成空
/*** 还原之前的状态 ***/
strcpy(newstr,str);
/*** 越来越少的元素 ***/
newstr[n-1]= ' ';
/*** 再次递归 ***/
build(newstr,n-1);

}
}

int main()
{
char str[MAX];
int n;
gets(str);
scanf("%d",&n);
build(str,n);
return 0;
}

部分代码结果:

请求实现过程

参考
https://www.cnblogs.com/orangebook/p/3537408.html?utm_source=tuicool&utm_medium=referral