python整數劃分,遞迴演算法

2021-09-10 03:47:56 字數 803 閱讀 9681

正整數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-2)劃分

……以此類推,直到m=0,停止劃分,這樣就將規模減小

if(n==0) return

if(m>1) f(n,m-1)

if(m<=n) f(n-m,m)

def

division

(n, m, string)

:if n ==0:

print

(string)

else

:if m>1:

division(n, m-

1, string)

if m <= n:

division(n-m, m,

str(m)

+' '

+string)

print

('輸入乙個不小於10的整數:'

)n =

int(

input()

)m=n

print

('%d的劃分如下:'

整數劃分的遞迴演算法

關於整數劃分有對應的動態規劃演算法,我這裡介紹一下遞迴的演算法,效率沒有動規高。這裡體現的是一種遞迴的思想 整數劃分問題就是將乙個整數劃分為多個數之和 也就是將正整數n表示成一系列正整數之和 n n1 n2 n3 n k 其中n1 n2 n3 n k k 1 例如正整數6有如下11種劃分 6 5 1...

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

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

整數劃分(遞迴)

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