0

我正在为一个递归问题而苦苦挣扎,这应该不会太难,但由于某种原因,我没有想出一个解决方案。

我有一个大小为“n”的数组,我想以一种获得每个可能组合的方式将每个元素从 0 计数到 n。

n = 3
[0,0,0]
[0,0,1]
[0,1,0]
[1,0,0]
[...  ]
[3,3,3]

任何人都可以帮忙吗?

4

3 回答 3

3

如果您必须自己编写代码,并且必须使用递归:

def gen(n, l, prefix=()):
  if l == 0:
    print prefix
  else:
    for i in range(n):
      gen(n, l - 1, prefix + (i,))

gen(4, 3)
于 2012-12-11T17:28:19.087 回答
1

不需要(显式)递归:

import itertools
for comb in itertools.product(range(4), repeat=3):
    print comb

产生:

(0, 0, 0)
(0, 0, 1)
(0, 0, 2)
(0, 0, 3)
(0, 1, 0)
(0, 1, 1)
...
(3, 3, 2)
(3, 3, 3)
于 2012-12-11T17:29:58.150 回答
0

这是一种使程序非常明确的方法:

def combinations(n, elements = None):
    if elements == 0: return [[]]

    if not elements: elements = n

    result = []
    for v in range(n + 1):
        for subcombination in combinations(n, elements - 1):
            result.append([v] + subcombination)

    return result

有更多的 Pythonic 方法可以做到这一点,可能有更好的性能,包括理解或生成器,但听起来你正在寻找一个显式的实现。

于 2012-12-11T17:29:04.267 回答