Как хранить значения глобально в рекурсивных вызовах в Python - PullRequest
0 голосов
/ 09 июня 2019

У меня есть сомнения по поводу возврата в python.Как сохранить переменные и список (временные), сформированные в различных вызовах, в рекурсии в python, как мы знаем, как только разрушенные стеки мощности разрушаются, значение переменной также уничтожается.Например:

avc=[]
var=0
def func(li,n,sumo,li2):
if sumo==n:
    global var
    var+=1
    #print(li2) ##line x
    adg(li2)
    return 
elif sumo>n:
    return 
else:
    for i in range(0,len(li)):
        li2.append(li[i])
        sumo=sum(li2)
        func(li,n,sumo,li2)
        li2.remove(li[i])

def adg(li3):
   global avc 
   avc.append(li3)
   #print("avc",avc)



if __name__=="__main__" :
   liq=list(map(int,input().strip().split()))
   n=liq[0]
   li=list(map(int,input().strip().split()))
   func(li,n,0,[])
   sumo=0
   count=0
   lis=[]
   j=0
   print(avc)

Теперь в строке x он печатает список, но когда я печатаю AVC в конце программы, он печатает пустой список.Я хочу, чтобы элементы были добавлены в AVC.пожалуйста, помогите.

1 Ответ

0 голосов
/ 09 июня 2019

Вы должны изменить

   avc.append(li3)

на

   avc.append(li3.copy())

Это потому, что avc содержит ссылку на li3, и, выполнив

 li2.remove(li[i])

Вы удаляете элементытакже из li3, потому что вы передали li2 в adg, где он называется li3.

Вызывая .copy () для li3, вы получаете новый список с теми же элементами, поэтому при изменении li2 (или li3) скопированныйсписок не меняется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...