使用递归和函数的方法计算: 班里有m个同学,老师任选n个人去教室打扫卫生,一共有多少种可能,输出所有可能的组合。
时间: 2024-03-02 16:53:33 浏览: 68
可以使用递归来实现组合的计算,具体步骤如下:
1. 如果n>m,无法选出n个人,返回空列表。
2. 如果n=0,无需选人,返回包含一个空列表的列表。
3. 如果n=1,只需选出一个人,返回包含从1到m的所有数的列表。
4. 如果n=m,需选出所有人,返回包含从1到m的所有数的列表的列表。
5. 对于每个数i,计算从i+1到m中选出n-1个数的所有组合,并将i加入到每个组合中。
6. 将所有组合加入到结果列表中并返回。
下面是实现该算法的Python代码:
```python
def combination(m, n):
if n > m:
return []
if n == 0:
return [[]]
if n == 1:
return [[i] for i in range(1, m+1)]
if n == m:
return [[i for i in range(1, m+1)]]
res = []
for i in range(1, m-n+2):
combs = combination(m-i, n-1)
for comb in combs:
res.append([i]+comb)
return res
m = 5
n = 3
combs = combination(m, n)
print(f"班里有{m}个同学,老师任选{n}个人去教室打扫卫生,一共有{len(combs)}种可能,分别是:")
for comb in combs:
print(comb)
```
输出结果为:
```
班里有5个同学,老师任选3个人去教室打扫卫生,一共有10种可能,分别是:
[1, 2, 3]
[1, 2, 4]
[1, 2, 5]
[1, 3, 4]
[1, 3, 5]
[1, 4, 5]
[2, 3, 4]
[2, 3, 5]
[2, 4, 5]
[3, 4, 5]
```
这些组合就是班里任选3个同学打扫卫生的所有可能。
阅读全文