問題描述:將正整數n表示成一系列正整數之和,求有多少中劃分方法。例如正整數6有以下劃分方法:
最大加數為6時,有1種劃分: 6;
最大加數為5時,有1種劃分: 5 + 1;
最大加數為4時,有2種劃分: 4 + 2,4 + 1 + 1;
最大加數為3時,有3種劃分: 3 + 3,3 + 2 + 1,3 + 1 + 1 + 1;
最大加數為2時,有3種劃分: 2 + 2 + 2,2 + 2 + 1 + 1,2 + 1 + 1 + 1 + 1;
最大加數為1時,有1種劃分: 1 + 1 + 1 + 1 + 1 + 1;
思路:在正整數n的所有不同劃分中,將最大加數n1不大於m的劃分個數記作q(n,m)。
1、因為是正整數劃分,當n < 1或m < 1時,劃分個數為0;
2、當n == 1時,劃分個數只有1個,即;
3、當m == 1時,劃分個數只有1個,即n個1相加;
4、當n < m時,由於劃分數中不能出現負數,因此q(n,m) == q(n,m),例如q(6,7) == q(6,6)
5、當n == m時:
6、當n > m時
綜上:q(n,m) n,m
1 n=1,m=1
q(n,n) n1+q(n,n-1) n=m
q(n,m-1)+a(n-m,m) n>m>1
**如下:
# include int q(int n, int m)
int main()
c 遞迴演算法整數劃分問題
整數劃分問題是演算法中的乙個經典命題之一,有關這個問題的講述在講解到遞迴時基本都將涉及。所謂整數劃分,是指把乙個正整數n寫成如下形式 n m1 m2 mi 其中mi為正整數,並且1 mi n 則為n的乙個劃分。如果中的最大值不超過m,即max m1,m2,mi m,則稱它屬於n的乙個m劃分。這裡我們...
整數劃分問題遞迴
整數劃分問題是演算法中的乙個經典命題之一,有關這個問題的講述在講解到遞迴時基本都將涉及。所謂整數劃分,是指把乙個正整數n寫成如下形式 n m1 m2 mi 其中mi為正整數,並且1 mi n 則為n的乙個劃分。如果中的最大值不超過m,即max m1,m2,mi m,則稱它屬於n的乙個m劃分。這裡我們...
整數劃分問題 遞迴
1.程式直接或間接呼叫自身的程式設計技巧稱為遞迴演算法 recursion 2.乙個過程或函式在其定義或說明中又直接或間接呼叫自身的一種方法,它通常把乙個大型複雜的問題層層轉化為乙個與原問題相似的規模較小的問題來求解,遞迴策略只需少量的程式就可描述出解題過程所需要的多次重複計算,大大地減少了程式的 ...