放苹果——递归
程序员文章站
2024-03-17 18:15:22
...
小蒜想知道把 MMM 个同样的苹果放在 NNN 个同样的盘子里,允许有的盘子空着不放,共有多少种不同的分法?(用 KKK 表示)555,111,111 和 111,555,111 是同一种分法。
输入格式
第一行是测试数据的数目 t(0≤t≤20)t(0 \le t \le 20)t(0≤t≤20)。
以下每行均包含两个整数 MMM 和 NNN,以空格分开。1≤M,N≤101 \le M, N \le 101≤M,N≤10。
输出格式
对输入的每组数据 MMM 和 NNN,用一行输出相应的 KKK。
输出时每行末尾的多余空格,不影响答案正确性
样例输入复制
1
7 3
样例输出复制
8
【分析】m 个苹果放在 n 个盘子中,求放法数量。
递归出口:m = 0, 1 种放法;n = 1,一种放法。
递归体:有空盘 + 无空盘。
#include <cstdio>
int sum;
int apple(int m, int n) {
if (m == 0) return 1;
if (n == 1) return 1;
if (m < n) return apple(m, m);
else return apple(m, n - 1) + apple(m - n, n);
}
int main() {
int t;
scanf("%d", &t);
while (t--) {
int m, n;
sum = 0;
scanf("%d %d", &m, &n);
sum = apple(m, n);
printf("%d\n", sum);
}
return 0;
}