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

手順を非常に明確にする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の方法は他にもありますが、明示的な実装を探しているようです。

于 2012-12-11T17:29:04.267 に答える