递归求解取球问题
------参考蓝桥杯教学与培训
问题描述:n(n!=0)个球中,任取m个(不放回),求有多少种不同取法
思路分析:
若m=0(不取出)或者n=m(全部取出),则只有一种;若n<m,则返回0;当n<m时,可以假定n个球里有一个特殊的球x,我们将取法分为两种:①取的球包含x,则相当于已经取了一个x,需要再在剩下的n-1个球里面取m-1个 ②取的球不包含x,则需要在除了x之后的n-1个球里面取m个 。最后把两种方法的个数相加则为取法总数
代码实现
def fetch_ball(n, m):
if n < m:
return 0
elif n == m or m == 0:
return 1
else:
return fetch_ball(n - 1, m - 1) + fetch_ball(n - 1, m)
# 验证准确性
print(fetch_ball(5, 3)) # 10
print(fetch_ball(10, 3)) # 120