使用递归和函数的方法计算: 班里有m个同学,老师任选n个人去教室打扫卫生,一共有多少种可能,输出所有可能的组合。
时间: 2024-02-25 09:51:56 浏览: 56
源代码_用递归方法编写函数_
这是一个组合问题,求从m个元素中选取n个元素的组合数。可以使用递归和函数的方法来解决。
首先,我们可以定义一个名为`combine`的函数,该函数的输入参数为m和n,输出为所有可能的组合。具体实现如下:
```python
def combine(m, n):
if n == 0 or n == m:
# 如果n等于0或者n等于m,则只有一种组合
return [[]]
else:
# 递归计算包含m-1个元素的n个元素的组合
result = combine(m - 1, n)
# 将包含m-1个元素的n个元素的组合中的每个组合都添加上m元素
for r in combine(m - 1, n - 1):
r.append(m)
result.append(r)
return result
```
在上述代码中,如果n等于0或者n等于m,则只有一种组合,即空集或者包含所有元素的集合。否则,我们可以递归计算包含m-1个元素的n个元素的组合,并将包含m-1个元素的n个元素的组合中的每个组合都添加上m元素,从而得到包含m个元素的n个元素的组合。
接下来,我们可以调用`combine`函数来计算班里有m个同学,老师任选n个人去教室打扫卫生的所有可能的组合,具体代码如下:
```python
m = 5
n = 3
combinations = combine(m, n)
print(f"班里有{m}个同学,老师任选{n}个人去教室打扫卫生,一共有{len(combinations)}种可能,分别是:")
for c in combinations:
print(c)
```
在上述代码中,我们假设班里有5个同学,老师任选3个人去教室打扫卫生,然后调用`combine`函数计算所有可能的组合,并输出结果。
输出结果如下所示:
```
班里有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]
```
可以看出,一共有10种可能的组合,分别是包含1、2、3号同学的组合,包含1、2、4号同学的组合,以此类推。
阅读全文