Python写一份用递归函数有 n 个数,从中选出 k 个数,问有多少种选择?
时间: 2024-05-09 21:15:43 浏览: 9
以下是Python递归函数实现从n个数中选出k个数的组合数量的代码:
```python
def combination(n, k):
# 基本情况
if k == 0 or k == n:
return 1
# 递归情况
return combination(n-1, k-1) + combination(n-1, k)
```
其中,当k=0或k=n时,只有一种选择,即不选或全选;当k和n不相等时,可以分为选第n个数和不选第n个数两种情况,因此可以使用递归实现。
例如,从5个数中选3个数的组合数量为:
```python
print(combination(5, 3)) # 输出10
```
输出结果为10,即从5个数中选3个数有10种选择。
相关问题
用Python写代码,使用递归和函数的方法计算: 班里有m个同学,老师任选n个人去教室打扫卫生,一共有多少种可能,输出所有可能的组合
可以使用递归来解决这个问题。假设我们已经选定了前k个人,现在需要从剩下的m-k个人中选出n-k个人,那么我们可以将其分为两种情况:
1.第k个人被选中,那么需要从剩下的m-k个人中选出n-k-1个人;
2.第k个人不被选中,那么需要从剩下的m-k个人中选出n-k个人。
下面是代码实现:
```python
def combination(m, n):
result = [] # 存储所有组合
if n == 0:
return result
if n > m:
return result
if n == 1:
for i in range(1, m + 1):
result.append([i])
return result
if n == m:
return [list(range(1, m + 1))]
# 递归
result = combination(m - 1, n - 1)
for item in result:
item.append(m)
result += combination(m - 1, n)
return result
m = 5
n = 3
result = combination(m, n)
print("共有%d种可能:" % len(result))
for item in result:
print(item)
```
输出结果为:
```
共有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]
```
用Python写使用递归和函数的方法计算: 班里有m个同学,老师任选n个人去教室打扫卫生,一共有多少种可能,输出所有可能的组合。
好的,这是一个经典的组合问题,可以用递归和函数来解决,以下是代码实现:
```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)`函数,并输出所有的结果。