#include<iostream>
using namespace std;
int split(int n, int m)//n 需要求得数。m:对n划分最大值不超过m
{
if (n == 1 || m == 1)//只有一种划分,划分成1.
{
return 1;
}
else if (n < m)//如果m>n,其实没必要。比如对3划分最大值不超过7,和对3划分最大值不超过3一样。
{
return split(n, n);
}
else if (n == m)//等于split(n,n-1)+自身的那一种划分。
{
return split(n,n - 1) + 1;
}
else//如果n>m,先进行降一下,f(n.m-1),这样之后,就相当于剩下的必须划分必须是m+?+?+...的形式,所以相当于对n-m进行划分。
{
return split(n, m - 1) + split(n - m, m);
}
}
int main()
{
int n;
cout << "请输入一个需要划分的数" << endl;
cin >> n;
cout<<"总共有" << split(n, n)<<"种划分";
}