整數劃分問題(遞迴)

2022-07-01 03:06:10 字數 1135 閱讀 3848

將正整數 n 表示成一系列正整數之和, n=n1+n2+…+nk, 其中 n1>=n2>=…>=nk>=1 , k>=1 。

正整數 n 的這種表示稱為正整數 n 的劃分。正整數 n 的不同的劃分個數稱為正整數 n 的劃分數,記作 p(n) 。

例如正整數 6 有如下 11 種不同的劃分,所以 p(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.

在正整數 n 所有不同的劃分中,將最大加數 n1 不大於 m 的劃分個數記作 q(n,m) ,稱它為屬於 n 的乙個 m 劃分。根據 n 和 m 的關係,考慮以下幾種情況:  

( 1 )當 n=1 時,不論 m 的值為多少( m>0) ,只有一種劃分即 ;

(2)  當 m=1 時,不論 n 的值為多少,只有一種劃分即 n 個 1 , ;

(3)  當 n=m 時,根據劃分中是否包含 n ,可以分為兩種情況:

(a). 劃分中包含 n 的情況,只有乙個即 ;

(b). 劃分中不包含 n 的情況,這時劃分中最大的數字也一定比 n 小,即 n 的所有 (n-1) 劃分。

因此 q(n,n) =1 + q(n,n-1);

(4) 當 n(5) 但 n>m 時,根據劃分中是否包含最大值 m ,可以分為兩種情況:

(a). 劃分中包含 m 的情況,即 }, 其中   的和為 n-m ,可能再次出現 m ,因此是( n-m )的 m 劃分,因此這種劃分個數為 q(n-m, m);

(b). 劃分中不包含 m 的情況,則劃分中所有值都比 m 小,即 n 的 (m-1) 劃分,個數為 q(n,m-1);

因此 q(n, m) = q(n-m, m)+q(n,m-1);

//

整數劃分問題

整數劃分問題遞迴

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

整數劃分問題 遞迴

1.程式直接或間接呼叫自身的程式設計技巧稱為遞迴演算法 recursion 2.乙個過程或函式在其定義或說明中又直接或間接呼叫自身的一種方法,它通常把乙個大型複雜的問題層層轉化為乙個與原問題相似的規模較小的問題來求解,遞迴策略只需少量的程式就可描述出解題過程所需要的多次重複計算,大大地減少了程式的 ...

遞迴求解整數劃分問題

定義乙個陣列dnum用來儲存乙個劃分中的每個數,用show函式來對一次劃分進行一次輸出,運用遞迴的方法進行整數的劃分,遞迴的時時候考慮5種情況,分別是nm 1,n 1 m和 0 subject 計算機演算法設計與分析 title 整數劃分問題 輸出乙個整數的所有劃分並統計總劃分數 coder lea...