整数划分问题其实和在篮子里放苹果问题是一样的。
从第二个角度思考比较容易。
#include<bits/stdc++.h>
using namespace std;
///把m个苹果放在n个篮子里
int fun2(int m,int n)
{
if(m==0) return 1; ///没有苹果,规定有一种放法
if(n==1) return 1; ///有一个苹果,也有一种方法
if(n>m) return fun2(m,m); ///苹果数<篮子数,肯定有空篮子
return fun2(m,n-1)+fun2(m-n,n);///苹果树>=篮子数,分两种情况,有无空蓝子
///从这个递推式就可以推出递归结束条件
}
int main()
{
int m;
while(cin>>m)
{
cout<<fun2(m,m)<<endl;
}
return 0;
}