このrecusionは、http://www.geeksforgeeks.org/print-all-possible-combinations-of-r-elements-in-a-given-array-of-size-n/から適合され、確かに、arr
の可能なすべての固有の組み合わせを長さr
で印刷します。再帰は、渡されたリストの値を上書きするのはなぜですか?
私が望むのは、可能な組み合わせをすべてリストに保存して、このアルゴリズムを別のプログラムでさらに使用することです。なぜ再燃焼でcombArray
の値が上書きされ、どうすれば解決できますか?今のよう
def combRecursive(arr, data, start, end, index, r, combArray):
if index == r:
combArray.append(data)
return combArray
i = start
while True:
if i > end or end - i + 1 < r - index:
break
data[index] = arr[i]
combArray = combRecursive(arr, data, i + 1, end, index + 1, r, combArray)
i += 1
return combArray
def main():
arr = [1, 2, 3, 4, 5]
r = 3
n = len(arr)
data = [9999999, 9999999, 9999999]
combArray = []
combArray = combRecursive(arr, data, 0, n-1, 0, r, combArray)
print("All possible unique combination is: ")
for element in combArray:
print(element)
結果:
[3, 4, 5]
[3, 4, 5]
[3, 4, 5]
[3, 4, 5]
[3, 4, 5]
[3, 4, 5]
[3, 4, 5]
[3, 4, 5]
[3, 4, 5]
[3, 4, 5]
は、私が欲しいもの:
[1, 2, 3]
[1, 2, 4]
[1, 2, 5]
[1, 3, 4]
[1, 3, 5]
[1, 4, 5]
[2, 3, 4]
[2, 3, 5]
[2, 4, 5]
[3, 4, 5]
@Prune:ここにはデフォルトの引数はありません。 – user2357112
あなたが望むのは、ホイールを再改造するのではなく、itertools.combinations([1,2,3,4,5]、3)]の '[list(x)for x]です。 – zwer
@ user2357112:ありがと...私は明らかにリストをあまりにも速くクリックした。私は参照を編集することはできませんが、この問題は何度も前にSOで処理されています。 – Prune