#include<iostream>
using namespace std;
int divide(int n,int m){
if(n<1||m<1){
cout<<" data error"<<endl;
}
else if(n==1||m==1){
return 1;
}
else if(n==m){
return (1+divide(n,n-1));
}
else if(n<m){
return (divide(n,n));
}
else return(divide(n,m-1)+divide(n-m,m));
}
int main(){
int n;
cin>>n;
cout<< divide(n,n);
}
解释:4分成4,3+1,2+2,2+1+1,1+1+1+1,一共5中
用递归的方法实现,求得总数,
0和负数不需要划分,所以当m和n小于1的时候报dataerror
如果m是1,说明分到了1+1+1+1...+1这种情况,这种情况只有1种所以return1
如果n是1,就只有1这一种
n=m的情况是分包含n和不包含n,包含就是只有一种,分4的话就是4,分5的话就是5
不包含n就是比n小1的所有划分,就是
用4为例走一遍,从main开始,divide(4,4)先走m=n那一步,结果是1+divide(4,3),4比3大,走最后一个else,就是divide(4,2)+divide(3,3),
然后是divide(4,1)+divide(3,2)+divide(3,2)+divide(2,3),2<3所以是divide(2,2),就是divide(4,1)+divide(3,2)+divide(3,2)+divide(2,2),
divide(2,2)->1+divide(2,1)
divide(2,1)->divide(1,1)
我自己懵了,我也不知道咋回事了,,。