def free_combination(list1, m): # 遞歸函數 global sum, list2 # 全局變量 if m == 1: # 遞歸出口 for i, element in enumerate(list1): # enumerate()函數:返回下標(索引)和值 if i in list2: # 由於已經加入組合的數字不能重複加入,因此跳出循環 continue list2.append(i) # 未使用的數字能夠加入組合 if n == len(list2): # 若是組合的長度符合要求,則符合規則的組合數量+1 sum += 1 for j in list2: # 打印 print(list1[j], end='\t') list2.pop() # 刪除最後一個元素。 (pop()返回刪除的值,咱們這裏用不到) print() # 換行 return 0 else: for i, element in enumerate(list1): if i in list2: # 由於已經加入組合的數字不能重複加入,因此跳出循環 continue list2.append(i) # 未使用的數字能夠加入組合 free_combination(list1, m - 1) # 遞歸調用 list2.pop() # 刪除最後一個元素。 (pop()返回刪除的值,咱們這裏用不到)list1 = eval(input('請輸入自由組合的序列(形如[1, 2, 3,...]):'))n = int(input('請輸入自由組合的長度:'))m = nsum = 0list2 = list() # 創建一個空列表,存儲已經加入組合的下標值free_combination(list1, m)print(f'{list1}{n}個數的排列共有{sum}種排列組合')