为什么递归会覆盖传递的列表中的值?
Why does recursion overwrite values in a list that is passed along?
此回避改编自 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]
您初始化 data
,然后对其进行更改并将其添加到 combArray
,这意味着您总是添加 相同的数组 到 combArray
,所以它的所有元素都是相同的。如果您希望元素是不同的数组,则需要为每个要添加到 combArrays
的元素创建一个新数组(例如,复制 data
)。
此回避改编自 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]
您初始化 data
,然后对其进行更改并将其添加到 combArray
,这意味着您总是添加 相同的数组 到 combArray
,所以它的所有元素都是相同的。如果您希望元素是不同的数组,则需要为每个要添加到 combArrays
的元素创建一个新数组(例如,复制 data
)。