抄袭大佬
import java.util.Scanner;
/**
* @Describe m个苹果分到n个篮子,篮子可以为空,有多少种分法
* @Author Winyar
* @Date 2022/6/9
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int m = sc.nextInt();
int n = sc.nextInt();
System.out.println(split(m, n));
}
}
private static int split(int m, int n) {
// 没有篮子只有0种分法
if (n <= 0 || m < 0) {
return 0;
}
// 只有一个篮子或只有0个或一个苹果时只有一种分法
if (n == 1 || m == 0 || m == 1) {
return 1;
}
//苹果数小于篮子数,即2个苹果放5个篮子,和2个苹果放2个篮子的放法是一样的
if (m < n) {
return split(m, m);
}
//苹果数大于等于篮子数,分为两种情况
if (m >= n) {
//情况一:每个篮子里面都放有一个苹果,决定放法数的就是剩余苹果在n个篮子的放法数
//情况二:至少有一个空篮子,即m个苹果在n-1个篮子的情况下的方法
return split(m - n, n) + split(m, n - 1);
}
return 0;
}
}