整数划分

【问题】将整数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;
}


运行结果:
整数划分