题目
求正整数n的不同划分个数。
例如,正整数6有如下11中不同的划分:6;5+1;4+2;4+1+1;3+3;3+2+1;3+1+1+1;2+2+2;2+2+1+1;2+1+1+1+1;1+1+1+1+1+1.
思路
如果设p(n)为正整数n的划分数,则难以找到递归关系,因此考虑增加一个自变量:将最大加数n1不大于m的划分个数计记作q(n;m). 可以建立q(n;m)的如下递归关系:
q(n,m)={
1 n==1,m==1
q(n,n) n<m
1+q(n,n-1) n==m
q(n,m-1)+q(n-m,m) n>m>1
}
正整数n的划分由最大加数n1==n的划分和最大加数n1<=n-1的划分组成。
正整数n的最大加数n1不大于m的划分由n1=m的划分和n1<=m-1的划分组成。
代码
function q(n,m){ if(n<1||m<1){ return 0 } if(n==1||m==1){ return 1 } if(n<m){ return q(n,n) } if(n==m){ return q(n,m-1)+1 } return q(n,m-1)+q(n-m,m) } console.log(q(6,6))