抄袭大佬

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;
    }

}