python 一个数列[n1, n2, n3.........],其中n个数的全排列个数

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}种排列组合')
相关文章
相关标签/搜索