/* 孔融分梨
孔融让梨,人人称颂;孔融分梨,也不简单。孔融有M个同样的梨,要分给N个人。每
个人手上有一个同样的盘子,孔融要将梨放入盘中,允许有的盘子空着不放,问共有多少种
不同的分法?3,1,1和1,3,1和1,1,3是同一种分法。
第一行是测试数据的数目t(0 <= t <= 20)。以下每行均包含二个整数M和N,以空格
分开。1<=M,N<=10。
对输入的每组数据M和N,用一行输出相应的分法数目。
Sample Input:
1
7 3
Sample Output:
8
*/
#include <stdio.h>
int fun(int m,int n) ;
int main()
{
int test;
int m,n;
scanf("%d",&test);
while(test--)
{
scanf("%d%d",&m,&n);
printf( "%d\n",fun(m,n) );
}
return 0;
}
int fun(int m,int n)
{
if(m<0) return 0;
if(m==1) return 1;//如果m==1,只有一种分法
if(n==1) return 1;//如果n==1,只有一种分法
//fun(m-n,n)表示分出n个梨后,剩下的梨的分法
//fun(m,n-1)表示m个梨分给n-1个人的分法
return ( fun(m-n,n)+fun(m,n-1) );//递归调用求所有分法的和
}