Python数字组合生成器需要递归

标签 python recursion

我一直在尝试使这个组合函数递归,但似乎无法弄清楚。我有一个工作非递归版本,可以执行我想要的操作,但它是一个静态函数,我需要它是动态的,因为在运行时我不知道有多少嵌套级别。如果有人能引导我走向正确的方向,我将不胜感激!

def Combinations(p, n):

    for i in range(len(n)):
        print(n[i])

    for i in range(len(n)):
        for j in range(i+1, len(n)):
            print(n[i], n[j])

    for i in range(len(n)):
        for j in range(i+1, len(n)):
            for k in range(j+1, len(n)):
                print(n[i], n[j], n[k])


def main():
    pools = 3
    numbers = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
    print("{} pools for numbers {}\n".format(pools, numbers))
    Combinations(pools, numbers)


main()

########################## 输出###################### ##########

1
2
3
4
5
6
7
8
9
10
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
1 10
2 3
2 4
2 5
2 6
2 7
2 8
2 9
2 10
3 4
3 5
3 6
3 7
3 8
3 9
3 10
4 5
4 6
4 7
4 8
4 9
4 10
5 6
5 7
5 8
5 9
5 10
6 7
6 8
6 9
6 10
7 8
7 9
7 10
8 9
8 10
9 10
1 2 3
1 2 4
1 2 5
1 2 6
1 2 7
1 2 8
1 2 9
1 2 10
1 3 4
1 3 5
1 3 6
1 3 7
1 3 8
1 3 9
1 3 10
1 4 5
1 4 6
1 4 7
1 4 8
1 4 9
1 4 10
1 5 6
1 5 7
1 5 8
1 5 9
1 5 10
1 6 7
1 6 8
1 6 9
1 6 10
1 7 8
1 7 9
1 7 10
1 8 9
1 8 10
1 9 10
2 3 4
2 3 5
2 3 6
2 3 7
2 3 8
2 3 9
2 3 10
2 4 5
2 4 6
2 4 7
2 4 8
2 4 9
2 4 10
2 5 6
2 5 7
2 5 8
2 5 9
2 5 10
2 6 7
2 6 8
2 6 9
2 6 10
2 7 8
2 7 9
2 7 10
2 8 9
2 8 10
2 9 10
3 4 5
3 4 6
3 4 7
3 4 8
3 4 9
3 4 10
3 5 6
3 5 7
3 5 8
3 5 9
3 5 10
3 6 7
3 6 8
3 6 9
3 6 10
3 7 8
3 7 9
3 7 10
3 8 9
3 8 10
3 9 10
4 5 6
4 5 7
4 5 8
4 5 9
4 5 10
4 6 7
4 6 8
4 6 9
4 6 10
4 7 8
4 7 9
4 7 10
4 8 9
4 8 10
4 9 10
5 6 7
5 6 8
5 6 9
5 6 10
5 7 8
5 7 9
5 7 10
5 8 9
5 8 10
5 9 10
6 7 8
6 7 9
6 7 10
6 8 9
6 8 10
6 9 10
7 8 9
7 8 10
7 9 10
8 9 10

最佳答案

你有点重新发明轮子。您可以使用 itertools 包中的 combinations 函数来获得您想要的内容。

from itertools import combinations

def all_combos(max_depth, iterable):
    return [list(combinations(iterable, d)) for d in range(1, max_depth+1)]

pools = 3
numbers = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

all_combos(pools, numbers)

或者如果您确实想要打印版:

def all_combos_print(max_depth, iterable):
    for d in range(1, max_depth+1):
        for c in combinations(iterable, d):
            print(('{} '*len(c)).format(*c))

all_combos_print(4, range(5))
# prints:
0
1
2
3
4
0 1
0 2
0 3
0 4
1 2
1 3
1 4
2 3
2 4
3 4
0 1 2
0 1 3
0 1 4
0 2 3
0 2 4
0 3 4
1 2 3
1 2 4
1 3 4
2 3 4
0 1 2 3
0 1 2 4
0 1 3 4
0 2 3 4
1 2 3 4

关于Python数字组合生成器需要递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47965868/

相关文章:

python - SQLAlchemy 联合括号问题

java - 根据给定值和父 ID 创建树

parsing - 递归上升解析器如何工作?

recursion - 延续传递风格使事情尾递归?

java - 打破java中的递归

Collat​​z链递归函数C

python - 删除字符串中括号内所有出现的单词的方法?

python - 为什么Heroku找不到满足要求的 'os'版本?

python - PyCharm:Python 字符串中的 HTML 语法检查和突出显示

python - 调试时,如何打印所有可在Tensorflow中训练的变量(列表格式)?