有n个苹果,m个盘子,求分法。
n>m,盘子可以是空,或者不空,空(有一个空)n个苹果,m-1盘子,不空n-m个苹果,m个盘子(想让每个盘子放一个苹果)
n=m,与n>m同理
n<m等价于n个苹果,n个盘子(盘子没有编号)
#include<iostream>
#include<cmath>
using namespace std;
int Divide_apple(int n,int m);
int main()
{
int n;//pingguo
int m;//panzi
cin>>n>>m;
cout<<Divide_apple(n,m);
return 0;
}
int Divide_apple(int n,int m)
{
if(m==0)
return 0;
if(n<=0)
return 1;
if(m>n)
return Divide_apple(n,n);
return Divide_apple(n,m-1)+Divide_apple(n-m,m);//注意
}
Divide_apple(n,m-1)
这个函数不断递归会模拟所以的n,m盘子数不断减少,m-1,m-2,m-3,直到m==0,会模拟所有盘子数。