数据结构第一次作业
P33-14
- 问题描述
求幂集 - 测试结果
我建议先看结果

- 算法思想 递归
- 首先这个是根据这里进行的学习的
https://blog.youkuaiyun.com/summer_dew/article/details/83921730?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162904254416780274173505%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=162904254416780274173505&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allbaidu_landing_v2~default-6-83921730.first_rank_v2_pc_rank_v29&utm_term=%E7%94%A8%E9%80%92%E5%BD%92%E6%B1%82%E5%B9%82%E9%9B%86&spm=1018.2226.3001.4187
显然人家写的比我好。
然而我也做了改进好不好。
就是我这个是顺序的,他那个是逆序的。我这里先输出a,他那里先输出c
5.贴一下我的代码
也是借鉴了静态数组,第一个If条件就是终点的判断啦,以及一些格式控制。后面没到终点,就是递归白。注意不能颠倒顺序,为啥,你可以自己手动跑一遍,会发现\0的一些设置问题。
总之你就先看那个人的代码吧,再来理解我的破代码。
#include <iostream>
using namespace std;
void helper(char* a, int n, int index)
{
static char tmp[100];
if (n >= strlen(a))
{
tmp[index] = '\0';
cout << '(' << tmp << ')';
if (strlen(tmp))
cout << ',';
return;
}
if (n < strlen(a))
{
//选a[n]
tmp[index] = a[n];
helper(a, n + 1, index + 1);
//不选a[n]
helper(a, n + 1, index);
//顺序不能变,\0必须是最后
}
}
int main()
{
char temp[50] = "abc";
cout << "{";
helper(temp, 0, 0);
cout << "}\n";
system("pause");
return 0;
}
P32-2
-
问题描述 输入2,输出ture,true;true,false;false,true;flase,flase;这2的n次方的所有可能的排列组合。同样输入n,也能输出2的n次方种组合;
-
测试结果我建议先看结果


-
算法思想 递归
-
以n=2举例,先创建了一个大小为2的数组,然后就给1or0,直到数组满了为止。显然第三行就是我们想要的结果。

5.我建议你直接照着代码手推一遍,这是理解这种简单递归题的最好方法。所以就直接上代码了。
有几个点说一下,使用了流算子boolalpha,可以将bool类型直接输出英文,当然这也导致了我new的数组是Bool类型的,而不是int类型的。
#include <iostream>
#include<vector>
using namespace std;
void helper(bool *a, int index,int t)
{
if (index == t)
{
for (int i = 0; i < t; i++)
{
cout << boolalpha << a[i];
if (i != t - 1) cout << ',';
}
cout << '\n';
return;
}
a[index] = 0;
helper(a, index + 1,t);
a[index] = 1;
helper(a, index + 1,t);
}
int main()
{
int n;
cout << "请输入n\n";
cin >> n;
bool* ptr = new bool[n];
helper(ptr,0,n);
delete[]ptr;
system("pause");
return 0;
}
本文介绍了如何使用递归算法分别求解字符串的幂集和生成2的n次方的所有排列组合。对于幂集问题,通过递归方式顺序输出所有子集,而排列组合则展示了从0到1填充数组并递归输出所有可能组合的过程。代码中包含了详细的解释和示例。

被折叠的 条评论
为什么被折叠?



