遞迴求解整數的分劃問題

2021-07-09 15:47:46 字數 670 閱讀 2931

整數劃分問題是演算法中的乙個經典命題之一,有關這個問題的講述在講解到遞迴時基本都涉及到。

所謂整數劃分,是指把乙個正整數n寫成如下形式:

n=m1+m2+m3+....+mi;(其中mi為正整數,並且1<=mi<=n),則為n的乙個劃分。 如果

中的最大值不超過m,即max

<= m,則稱它屬於n的乙個m劃分。這裡我們記n的m劃分的個數為f(n,m);

例如當n=4時,它有5個劃分:、、、、;

注意:4=1+3和4=3+1被認為是同乙個劃分。

如,對於正整數n=6,可以分劃為:

5+14+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,編寫演算法列印所有劃分。

程式設計思想:簡單遞迴。

code:

#include#include#include#include#includeusing namespace std;

void f(int n,int a,int k)

}int main()

return 0;

}

整數的分劃問題

對於乙個正整數n的分劃,就是把n表示成正整數之和的表示式。主要,分劃與順序無關,例如6 5 1和6 1 5被認為是同一種分劃。解題思路 定義乙個函式q n,m 表示正數n的 任何加數都不超過m 的分劃的數目,n的所有分劃數目p n 就應該表示為q n,n 一般的q n,m 有如下遞迴關係 1 q n...

遞迴求解整數劃分問題

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

整數劃分問題 遞迴,dfs求解

給定任何乙個大於1的自然數n,總可以拆分成若干個小於n的自然數之和。當n 7,共有14種拆分方法 這道題目我們可以想到其實應該用遞迴來做,而dfs又是可以使用遞迴求解,我們首先可以在遞迴函式裡進行拆分的列舉,需要拆分的數應該是能夠由哪一些數相加,怎樣設計遞迴函式dfs呢,我們應該清楚應該拆分n,比如...