我正在为一个递归问题而苦苦挣扎,这应该不会太难,但由于某种原因,我没有想出一个解决方案。
我有一个大小为“n”的数组,我想以一种获得每个可能组合的方式将每个元素从 0 计数到 n。
n = 3
[0,0,0]
[0,0,1]
[0,1,0]
[1,0,0]
[... ]
[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)
不需要(显式)递归:
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)
这是一种使程序非常明确的方法:
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 方法可以做到这一点,可能有更好的性能,包括理解或生成器,但听起来你正在寻找一个显式的实现。