d = list('abcde')
def combine(p,start,r):
if r==0:
print(*p)
return
for i in range(start,len(d)):
combine(p+[d[i]],i+1,r-1)
combine([],0,3)
從 5 個元素 ['a', 'b', 'c', 'd', 'e']
中取 3 個元素的所有組合,並且沒有使用任何內建函數。程式碼中使用遞迴實現了組合的生成。
執行結果說明:
d = list('abcde')
:將字串abcde
轉換成列表['a', 'b', 'c', 'd', 'e']
。combine(p, start, r)
:這個遞迴函數會產生長度為r
的組合:- 每次選擇一個元素後進入下一層遞迴,直到選滿
r
個元素。 - 當
r == 0
時,代表已經選擇滿 3 個元素,這時會輸出當前的組合。
- 每次選擇一個元素後進入下一層遞迴,直到選滿
combine([], 0, 3)
:這是主程式呼叫,用來產生從 5 個元素中取 3 個元素的所有組合。
每次遞迴中的步驟:
- 在每次遞迴中,函數會從當前的位置
start
開始,選擇一個元素,並遞迴進入下一層,直到選擇滿 3 個元素為止。 - 例如:
- 第一次遞迴選擇了
a
,然後再從b
開始選擇,最後產生了組合a b c
。 - 遞迴返回後,會嘗試選擇
d
,產生a b d
,以此類推。
- 第一次遞迴選擇了
執行結果:
a b c
a b d
a b e
a c d
a c e
a d e
b c d
b c e
b d e
c d e
這是 abcde
中選取 3 個元素的所有組合。每組組合的順序與選擇元素的順序一致,因此不會重複或倒序。
沒有留言:
張貼留言