整數劃分(遞迴)

2021-08-03 05:54:04 字數 745 閱讀 5188

將正整數n表示成一系列正整數之和

n=n1+n2+......+nk

例如對於正整數6: 

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+1;

所以對於正整數6有p(6)=11中劃分

在正整數n的所有不同劃分中,將最大加數n1不大於m的劃分個數記作q(n,m)。

有如下的遞迴關係:

1)q(n,1)=1 ,n>=1

當最大加數n1不大於1時,只有n=1+1+1...+1這種形式

2)q(n,m)=q(n,n) ,n<=m

最大加數n1實際不能大於n。因此q(1,m)=1。

3)q(n,n)=1+q(n,n-1) ,n=m

正整數n的劃分由n1=n的劃分和n1<=n-1的劃分組成。

4)q(n,m)=q(n,m-1)+q(n-m,m), n>m>1

對於n>m>1,正整數n的最大加數n1不大於m的劃分由n1=m的劃分【q(n-m,m)】  和  n1<=m-1的劃分組成【q(n,m-1)】。

#includeusing namespace std;

int devide(int n,int m)

{ if(n<1||m<1)

return 0;

if((n==1)||(m==1))

return 1;

if(n

整數劃分(遞迴)

整數劃分問題是演算法中的乙個經典命題之一,有關這個問題的講述在講解到遞迴時基本都將涉及。所謂整數劃分,是指把乙個正整數n寫成如下形式 n m1 m2 mi 其中mi為正整數,並且1 mi n 則為n的乙個劃分。如果中的最大值不超過m,即max m1,m2,mi m,則稱它屬於n的乙個m劃分。這裡我們...

整數劃分(遞迴)

package test04 元素n的劃分,即存在某些數,n1,n2,n3,n4.使得n1 n2 n 比如6的劃分共有11種,count 6,4 9 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 publi...

整數劃分 遞迴

將正整數n表示成一系列正整數之和 n n1 n2 nk,其中n1 n2 nk 1,k 1。正整數n的這種表示稱為正整數n的劃分。求正整數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 ...