Liste rekursiv durchlaufen
Verfasst: Sonntag 14. März 2021, 12:56
Hallo, zusammen,
ich sitze an einem Problem, bei dem ich eine gegebene sortierte Liste mit nicht notwendigerweise verschiedenen Zahlen als Listeneinträge in einer Funktion durchlaufe und eine Liste zurückgebe, die alle möglichen Summen aus n nicht notwendigerweise verschiedenen Listeneinträgen
enthält. Gegeben sei folgende Liste: [1,2,3,4,5,6].
Bei n=1 wäre die zurückgegebene Liste auch wieder [1,2,3,4,5,6],
bei n=2 dementsprechend
[1+1, 1+2, 1+3, 1+4, 1+5, 1+6, 2+2, 2+3 ,2+4, 2+5, 2+6, 3+3, 3+4 ,3+5, 3+6, 4+4, 4+5, 4+6, 5+5, 5+6, 6+6] (In Wirklichkeit enthält die Liste die Ergebnisse der Additionen, die Darstellung als Rechnung soll nur dem Verständnis des Problems dienen.)
Mein rekursiver Ansatz sieht folgendermaßen aus:
Hierbei steht anzahl für die Zahl, wie viele Listeneinträge die Summen enthalten sollen und zahlcurr für die Zahl, der wievielte Summand momentan aufsummiert wird.
Ich würde die Funktion also in Abhängigkeit einer bestimmten Liste und der Anzahl aufrufen. Zahlcurr wäre beim Aufruf 1 und listeAusgabe die leere Liste.
Leider funktioniert das noch nicht ganz. Kann mir dabei jemand behilflich sein?
Vielen Dank im Voraus.
ich sitze an einem Problem, bei dem ich eine gegebene sortierte Liste mit nicht notwendigerweise verschiedenen Zahlen als Listeneinträge in einer Funktion durchlaufe und eine Liste zurückgebe, die alle möglichen Summen aus n nicht notwendigerweise verschiedenen Listeneinträgen
enthält. Gegeben sei folgende Liste: [1,2,3,4,5,6].
Bei n=1 wäre die zurückgegebene Liste auch wieder [1,2,3,4,5,6],
bei n=2 dementsprechend
[1+1, 1+2, 1+3, 1+4, 1+5, 1+6, 2+2, 2+3 ,2+4, 2+5, 2+6, 3+3, 3+4 ,3+5, 3+6, 4+4, 4+5, 4+6, 5+5, 5+6, 6+6] (In Wirklichkeit enthält die Liste die Ergebnisse der Additionen, die Darstellung als Rechnung soll nur dem Verständnis des Problems dienen.)
Mein rekursiver Ansatz sieht folgendermaßen aus:
Code: Alles auswählen
def durchlaufeListe(liste, anzahl, zahlcurr, listeAusgabe):
if anzahl == 1:
for m in liste:
listeAusgabe.append(m)
return listeAusgabe
else:
for zahlcurr in range(anzahl+1):
if zahlcurr == 1:
for n in range(len(durchlaufeListe(liste, anzahl-1,zahlcurr,listeAusgabe))):
listeAusgabe.append(durchlaufeListe(liste,anzahl-1,zahlcurr,listeAusgabe)[n]+durchlaufeListe(liste, 1,zahlcurr,listeAusgabe)[n])
else:
for p in range(len(durchlaufeListe(liste,anzahl-1,zahlcurr,listeAusgabe).pop(zahlcurr-1))):
listeAusgabe.append(durchlaufeListe(liste,anzahl-1,zahlcurr,listeAusgabe).pop(zahlcurr-1)[p]+durchlaufeListe(liste,1,zahlcurr,listeAusgabe).pop(zahlcurr-1)[p])
return listeAusgabe
Ich würde die Funktion also in Abhängigkeit einer bestimmten Liste und der Anzahl aufrufen. Zahlcurr wäre beim Aufruf 1 und listeAusgabe die leere Liste.
Leider funktioniert das noch nicht ganz. Kann mir dabei jemand behilflich sein?
Vielen Dank im Voraus.