#include<stdio.h>
using namespace std;
int f(int n,int m)
{
if(n<m)
return f(n,n);
if(m==1||n==0)
return 1;
else return f(n-m,m)+f(n,m-1);//最大加数为m的划分数和最大加数小于m的划分数
}
int main()
{
int m,n;
while(scanf("%d %d",&n,&m)!=EOF)
{
printf("%d不大于%d的划分个数为%d\n",n,m,f(n,m));
}
return 0;
}
打印所有结果要建二叉树
12-05
1788
09-16
09-16