整數劃分的遞迴演算法

2021-07-14 01:09:08 字數 912 閱讀 6529

關於整數劃分有對應的動態規劃演算法,我這裡介紹一下遞迴的演算法,效率沒有動規高。這裡體現的是一種遞迴的思想

整數劃分問題就是將乙個整數劃分為多個數之和

也就是將正整數n表示成一系列正整數之和: n = n1

+n2+

n3+.

..+n

k ,其中n1

≥n2≥

n3≥.

..≥n

k (k≥1)

例如正整數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

我們定義這樣乙個函式int devideint(int n, int m)n表示所要求的和, m表示加數中最大的數(n1

)不超過m,那我們可以建立如下的遞推關係式:de

vide

int(

n,m)

=⎧⎩⎨

11+d

evid

eint

(n,n

−1)d

evid

eint

(n,m

−1)+

q(n−

m,m)

m=1n

≤mn>m

其中devideintel(n,m)=1+devideint(n,n-1),當n

這時該演算法就明了了。下面的c++**

#include

using

namespace

std;

int devideinteger(int n, int m)

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種劃分 ...

python整數劃分,遞迴演算法

正整數n,n m1 m2 mk,其中mi為正整數,並且1 mi n,集合是整數n的乙個劃分。輸入乙個不小於10的整數,輸出其所有整數劃分。將整數n劃分,假設某種劃分中m為最大的整數,則 n可分為n m,m,n m 再由 m 1 劃分 n m 可分為 n m m 1 m 1 n m m 1 再由 m ...

整數劃分(遞迴)

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