编写一个递归函数,输入任意一个自然数n,输出 {1,2,⋯,n}的所有子集.
时间: 2024-09-16 18:06:12 浏览: 50
回溯法 - 输出自然数1到n所有不重复的排列,即n的全排列
编写一个递归函数来生成所有自然数集合 {1, 2, ..., n} 的子集,可以使用Python中的列表推导式和递归来实现。这是一个经典的动态规划问题,称为“二进制数字表示法”。我们可以将每个自然数看作是一个二进制位串,其中1表示包含该元素,0表示不包含。
以下是一个简单的Python示例:
```python
def generate_subsets(n):
def helper(start=0, current=[]):
if start == n:
# 当前子集已经到最大值,添加到结果列表
result.append(current)
return
# 如果当前元素还未添加,加入并继续递归
helper(start + 1, current + [start + 1])
# 如果当前元素已添加,不加并继续递归
helper(start + 1, current) # 注意这里不需要再加[start+1]
result = [] # 存储最终子集的结果
helper()
return result
# 测试函数
n = 4
subsets = generate_subsets(n)
for i, subset in enumerate(subsets):
print(f"子集{i+1}: {subset}")
阅读全文