あまり難しくないはずの再帰問題に取り組んでいますが、何らかの理由で解決策が思いつきません。
サイズ "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)
手順を非常に明確にする1つの方法を次に示します。
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
内包表記やジェネレーターなど、パフォーマンスが向上する可能性のあるPythonの方法は他にもありますが、明示的な実装を探しているようです。