用Python写使用递归和函数的方法计算: 班里有m个同学,老师任选n个人去教室打扫卫生,一共有多少种可能,输出所有可能的组合。
时间: 2024-03-17 17:45:26 浏览: 61
好的,这是一个经典的组合问题,可以用递归和函数来解决,以下是代码实现:
```python
def combine(m, n):
"""
计算m个人中任选n个人的所有可能组合
"""
if n == 0:
return [[]]
if m < n:
return []
combs = combine(m-1, n-1)
for comb in combs:
comb.append(m)
return combs + combine(m-1, n)
m = 5
n = 3
combs = combine(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]
```
这段代码首先定义了一个函数`combine(m, n)`,接收两个参数m和n,分别表示班里的人数和需要选出的人数。函数返回一个列表,其中包含了所有的可能组合。
在函数内部,首先处理了两种特殊情况:当需要选出的人数为0时,返回一个空列表`[[]]`;当班里的人数不足以选出需要的人数时,返回一个空列表`[]`。
对于其他情况,采用递归的方式,先计算出选出n-1个人时的所有可能组合(即`combine(m-1, n-1)`),然后将第m个人加入到这些组合中,得到n个人的组合。最后再计算从m-1个人中选出n个人的组合(即`combine(m-1, n)`),将这两部分的结果合并起来,即可得到所有可能的组合。
最后在主程序中调用`combine(m, n)`函数,并输出所有的结果。
阅读全文