2024年10月9日 星期三

組合

 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 個元素的所有組合,並且沒有使用任何內建函數。程式碼中使用遞迴實現了組合的生成。

執行結果說明:

  1. d = list('abcde'):將字串 abcde 轉換成列表 ['a', 'b', 'c', 'd', 'e']
  2. combine(p, start, r):這個遞迴函數會產生長度為 r 的組合:
    • 每次選擇一個元素後進入下一層遞迴,直到選滿 r 個元素。
    • 當 r == 0 時,代表已經選擇滿 3 個元素,這時會輸出當前的組合。
  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 個元素的所有組合。每組組合的順序與選擇元素的順序一致,因此不會重複或倒序。

沒有留言:

張貼留言