が空のリストについては、あなたの結果は空のリストであることを考慮して、すなわち任意の非空のリストについては
f([]) == ""
(これはあなたの「基本ケース」です)、あなたは最初のリストの各文字を取ります要素(リストの「頭」)と再帰的にリストの残りの部分(「尾部」)にあなたの関数を適用することにより、返された各文字列にそれを先頭に追加(これはあなたの「再帰的なケース」です):
f(['ABC'])
== 'A' + f([]), 'B' + f([]), 'C' + f([])
== 'A' + '', 'B' + '', 'C' + ''
== 'A', 'B', 'C'
f(['ABC', DEF'])
== 'A' + f(['DEF']), 'B' + f(['DEF']), 'C' + f(['DEF'])
== 'A' + 'D' + f([]), 'A' + 'E' + f([]), 'A' + 'F' + f([]), 'B' + 'D' + f([]) ...
== 'AD', 'AE', 'AF', 'BD', 'BE', 'BF', 'CD', 'CE', 'CF'
Pythonでは、これは(やや非効率的で冗長ですが、彼は)アルゴリズム:
def f(xs):
if not xs:
yield ''
else:
head = xs[0]
tail = xs[1:]
for char in head:
yield char
for s in f(tail):
yield char + s
は、次のプログラムは、あなたが尋ねたものに近いはず
print list(f(['ABC', 'DEF', 'GHI']))
プリント
['A', 'AD', 'ADG', 'ADG', 'ADH', 'ADH', 'ADI', 'ADI', 'AE', 'AEG', 'AEG', 'AEH', 'AEH', 'AEI', 'AEI', 'AF', 'AFG', 'AFG', 'AFH', 'AFH', 'AFI', 'AFI', 'B', 'BD', 'BDG', 'BDG', 'BDH', 'BDH', 'BDI', 'BDI', 'BE', 'BEG', 'BEG', 'BEH', 'BEH', 'BEI', 'BEI', 'BF', 'BFG', 'BFG', 'BFH', 'BFH', 'BFI', 'BFI', 'C', 'CD', 'CDG', 'CDG', 'CDH', 'CDH', 'CDI', 'CDI', 'CE', 'CEG', 'CEG', 'CEH', 'CEH', 'CEI', 'CEI', 'CF', 'CFG', 'CFG', 'CFH', 'CFH', 'CFI', 'CFI']
あなたが試したことを追加してください。 –
あなたはこれを再帰する必要はありません –
サイズ2のグループでこの問題を解決する関数foo()を与えたとします。どのように使用できますか? – Elazar