![](https://img-blog.csdnimg.cn/img_convert/5610170b29dd39385def3c30185f25f2.png)
用最大为m凑出n的数量
![](https://img-blog.csdnimg.cn/img_convert/79df69f9af27b1ec62f98ad44b8a0446.png)
![](https://img-blog.csdnimg.cn/img_convert/7dc3de1f7d7289e0a708b1aa3a976c63.png)
图解:
![](https://img-blog.csdnimg.cn/img_convert/49a139621834b086d304aa2e945b134c.jpeg)
代码如下:
#include <bits/stdc++.h>
using namespace std;
int f(int n,int m)
{
if(n==1||m==1) return 1; //递归出口,f(1,m)=1,f(n,1)=1,1个1或者n个1
else if(m>n) return f(n,n); //f(n,m)=f(n,n)
else if(n==m) return f(n,n-1)+1; //f(n,n)=1+f(n,n-1)
else return f(n,m-1)+f(n-m,m); //f(n,m)=f(n,m-1)+f(n-m,m)
}
int main() {
int n;
while(scanf("%d",&n)!=EOF){
printf("%d\n",f(n,n)); //n的m划分的个数f(n,m)
}
return 0;
}