2015-11-01 5 views
1

У меня есть рекурсивная функция, которая пытается найти комбинации чисел, которые добавляют к определенному числу. Я сохранить результаты в списке под названием validCombinationsPython - Элементы списков как-то перезаписываются

Код:

sum = 4 
digits = 2 
currentDigit = digits 
validCombinations = [] 

#recursion function to find combinations of numbers that add to the sum variable 
def recursive(index): 
    if 10 not in digitList:   
     if index >= 0: 
      total = 0 
      for n in digitList: 
       total += n 
      if total == sum: 
       validCombinations.append(digitList) 
      digitList[index] += 1 
      recursive(index-1) 
     else: 
      recursive(currentDigit-1) 

digitList = [] 

for n in range(digits,0,-1): 
    for i in range(n): 
     digitList.append(0) 
    recursive(n-1) 
    digitList = [] 
    currentDigit -= 1 

print validCombinations 

При выполнении этого он выводит

[[9, 10], [10, 0]] 

Когда я ожидал увидеть этот

[[2, 2], [4]] 

У меня есть прошел через код, и кажется, что он каким-то образом перезаписывает элементы в списке, h в моем коде я только когда-либо взаимодействую с validCombinations с помощью метода append(), который должен просто добавить его в конец.

Я пропустил что-то или это рекурсия, вызывающая это?

+0

«цифры» должны быть нижними границами для чисел, которые должны быть проверены? – BenjaminGolder

+0

посмотрите, что здесь происходит: https://gist.github.com/anonymous/7cbd68961bc0b577a15f – BenjaminGolder

+1

Мы не ожидаем [1,3] как действительного разложения 4? –

ответ

1

Использование списка:

 if total == sum: 
      validCombinations.append(list(digitList)) 

Вы должны получить копию digitList, а не digitList.

Смежные вопросы