整数划分
【问题】将整数n表示为一系列正整数的和。n = n1 + n2 + …+ nk (n1 >= n2>=…>=nk>=1,k>=1) 并称之为n的划分。不同的划分个数称为正整数n的划分数,求可划分整数的总数
递归实现:
#include<cstdio>
int fact(int n,int m) { //n为当前所划分整数,m为所划分整数最大值
if(n==1||m==1)//程序终止条件
return 1;
else if(n<m)
return fact(n,n);
else if(n==m)//所划分数与最大整数相同时,比如fact(6,6),就是6一种情况加上fact(6,5);
return 1+fact(n,m-1);
else return fact(n,m-1)+fact(n-m,m);//当n>m>1时,划分两种情况之和
}
int main() {
int n;
scanf("%d",&n);
printf("%d\n",fact(n,n));
return 0;
}
运行结果: