一、问题描述

求解正整数划分数问题

二、思路描述

求解正整数划分数问题

三、实现

//n = n1+n2+...+nn	n1>=n2>=...>=nn
int q(int n, int m)	//n是待划分的数字,m是加数的上限
{
	if (n < 1 || m < 1) return 0;
	if (n == 1 || m == 1) return 1;	//待划分的数字等于1或者最大加数不超过1,划分数为1
	if (m > n) return q(n, n);	//n1 > n
	if (n == m) return q(n, n - 1) + 1;	//n1 = n
	return q(n, m - 1) + q(n - m, m);	//n1 < n	拆分成最大加数为m-1和最大加数为m两部分
}

相关文章: