递归逻辑如下:\color{red}{递归逻辑如下:}递归逻辑如下:
1.\color{blue}{1.}1. 如果没有苹果了或者没有盘子了,没有分法,直接return 0;
2.\color{blue}{2.}2. 如果只有一个盘子或只有一个苹果,只有一种分法(因为不考虑顺序),return 1;
3.\color{blue}{3.}3. 如果盘子数量为 222 ,则放法数量为 m/n+1m/n+1m/n+1 (此处为整除)(我研究的规律你们自己去试)
4.\color{blue}{4.}4. 剩下的情况,如果 m>nm>nm>n ,则有两种情况,空一个盘子不放,或每个盘子放一个苹果(若放完后的苹果数量比盘子数量少,盘子数量应减少),return f(m,n-1)+f(m-n,min(m-n,n));
5.\color{blue}{5.}5. 如果 m==nm==nm==n ,也有两种情况,空一个盘子不放,或每个盘子放一个(这种情况苹果放完了,再递归下去还会return 0;没有意义,return f(m,n-1)+1;
6.\color{blue}{6.}6. 如果 m<nm<nm<n 不管怎么放至少有 m−nm-nm−n 个盘子空着,只剩 mmm 个盘子,所以return f(m,m);
C++ Code: