把m个同样的苹果放在n个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。
数据范围:0<=m<=10,1<=n<=10
用m表示苹果个数,n表示盘子个数,分几种情况:
1、当没有苹果或没有盘子时,没有分法
2、当只有1个苹果,或只有1个盘子,就只有一种分法
3、当苹果数大于盘子数(m>n)时:
3.1、当没有空盘时:即(m,n)=(m-n,n)。意思是先将n个苹果放进那个盘子,就只剩下m-n个苹果分到n个盘子
3.2、有1个空盘,即(m,n)=(m,n-1)。意思是去掉一个盘子,就只剩m个苹果分到n-1个盘子
4、当苹果数小于盘子数(m<n)时:
4.1、即(m,n)=(m,m),相当于将m个苹果分到m个盘子中
递归
def put(m, n):
if m == 1 or n == 1:
return 1
if m < n:
return put(m, m)
else:
return put(m - n, n) + put(m, n - 1)