整數劃分問題 演算法

2021-10-04 22:09:52 字數 738 閱讀 3951

在遞迴裡,要對形參進行判斷

(1)當n=1時 q(1,m):表示是對1的劃分,那麼只有一種劃分方式 1

(2)當m=1時q(n,1):當m=1時其實就是把讓所有加數小於等於1,那就是所有加數都是1咯(不考慮負數),當然也只有一種劃分方式

(3)當n=m時q(n,n):此時就是對n的劃分出來的數沒有限制,預設限制就是不大於n,此時劃分的總類數要分兩種情況才比較好解決:

1.劃分出來的數包含n(或m,因為n=m):那只有一種方式 比如 6的劃分 只有 6;一種方式

2.劃分出來的數不包含n(或m,因為n=m):就可以認為是將6劃分出來的數都小於6,其實就是都小於或等於5,接下來 其實就是求出來q(n,n-1)或者是q(n,m-1),此時n>m-1,放到遞迴方程裡就是求解q(n,m) n>m 綜合起來 q(n,n)=1+q(n,m-1)

(4)當n>m時:當遇到這個問題時,其實可以看做是對n的劃分有了條件,就是所有的劃分出來的數小於m,在上文中,6有11種劃分方式,那是沒有對6劃分出來的數進行限制,當要使劃分出來的數都小於某個數時比如5時,那就不是11種了。

(5)q(n,m) n#includeusing namespace std;

int q( int n , int m )else if( n > m )else if( n < m )else

}int main()

整數劃分問題(遞迴演算法)

問題描述 將正整數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種劃分 ...

c 遞迴演算法整數劃分問題

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

整數劃分問題

整數劃分問題是乙個經典問題,幾乎在講演算法設計的書中都會講,下面把主要的思想給總結下。所謂整數劃分,就是將乙個正整數n劃分為一系列的正整數之和,如將n可以劃分為 1 我們該如何找出所有的劃分呢?我們可以先來看看整數劃分的規律 譬如正整數 6 劃分情況如下 6 5 14 2 4 1 1 3 3 3 2...