问题描述
将正整数n表示成一系列正整数之和,
n = n1 + n2 + n3 +…+nk (其中ni为正整数,1<=ni<=n)
举例说明,
n = 4的情况下,共有5种划分情况
4 = 4
4 = 3 + 1
4 = 2 + 2
4 = 2 + 1 + 1
4 = 1 + 1 + 1 + 1
注意:这里的1 + 3 和3 + 1被认为是同一种划分情况。
问题分析
首先引入一个表示方式q(n,m)
它的含义是,在正整数n的划分中,将最大加数不大于m的划分数表示为q(n,m)。
这里根据m的不同取值有以下几种情况出现。
- m=1
q(n,1) = 1,n = n个1相加,只有一种情况。 - n> m > 1
q(n,m) = q(n,m-1) + q(n-m,m)
q(n-m,m)表示最大加数等于m的情况,q(n,m-1)表示最大加数不大于m-1的情况。 - m > n
q(n,m) = q(n,n) - m = n
q(n,m) = q(n,n) = 1 + q(n,n-1)
递归代码实现
int