/*
*问题描述:把M个同样的苹果放到N个同样的盘子里面,问有多少种不同的算法?
注意:5 1 1和1 5 1是同一种放法
输入:输入一个整数表示有几行测试数据,下面每行分别输入M和N
*/
#include <iostream>
using namespace std;
int f(int m,int n)
{
if(m < n)//盘子数比苹果数多的情况
return f(m,m);
if(m == 0)//没有苹果
return 0;
if(n == 0)//没有盘子,就不放,一种算法
return 1;
//苹果不少于盘子的情况
return f(m ,n-1) + f(m-n, n);//有空盘子放法和没空盘子放法
}
int main()
{
int t,m,n;
cin>>t;//有几组测试数据
while (t--)
{
cin >> m>>n;
cout<<"放法:"<< f(m , n) <<endl;
}
return 0;
}

运行结果:

放苹果问题(递归)_递归