2015-11-01 44 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無論如何,在我的代碼中,我只使用append()方法與validCombinations進行交互,該方法應該將其添加到最後。

我錯過了一些東西,或者是造成這種情況的遞歸嗎?

+0

是'數字'應該是應該測試的數字的下限? – BenjaminGolder

+0

看看這裏發生了什麼:https://gist.github.com/anonymous/7cbd68961bc0b577a15f – BenjaminGolder

+1

我們不期待[1,3]作爲4的有效分解? –

回答

1

使用列表:

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

你必須讓digitList,不digitList的副本。