Rekursive Schleife

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
waki
User
Beiträge: 133
Registriert: Dienstag 9. März 2010, 16:41

Hey,
wollte gerad ein Programm mit einer rekursiven Schleife schreiben, jedoch weiß ich momentan einfach nicht, wo hier mein Fehler ist. Eigentlich sollen aus den Namen jeweils 3er Gruppen erstellt werden, die dann zu rooms hinzugefügt werden. Jedoch endet das ganze in einer Endlosschleife, da es nicht erkennt, wann die Anzahl der Namen in room 3 beträgt. Jedoch versteh ich nicht wieso das so ist, oder liegt noch ein anderer Fehler vor?

Code: Alles auswählen

names = {"Name1":0, "name2":0, "Name3":0, "Name4":0, "Name5":0, "Name6":0}
rooms = []

def create_rooms(size,personen = names.keys(), room = []):
    global rooms
    print len(room)
    if len(room) != size:
        for person in personen:
            akt_room = room
            akt_room.append(person)
            create_rooms(size, personen, akt_room)
    
    elif len(room) == size:
        rooms.append(room)

create_rooms(3)
        return
Gruß Kilian
JonasR
User
Beiträge: 251
Registriert: Mittwoch 12. Mai 2010, 13:59

Hey waki,

es hat mich erst einmal ein Paar Minuten gekostet um zu kapieren was du machen möchtest :P Bin aber heute generell etwas verpeilt...

Du willst also die Namen auf verschiedene Räume aufteilen und dabei soll jeder Raum eine gegebene Maximalgröße haben.
Ergebnis wäre dann so ungefähr:

Code: Alles auswählen

[['Name6', 'Name4', 'Name5'], ['name2', 'Name3', 'Name1']]
Korrigiere mich bitte wenn ich (mal wieder :P) falsch liege.

Zu deinem Code:

- Was soll das global? schau dir für deinen Zweck mal "return" an und vergiss global ganz schnell wieder ;)
- Du brauchst keine rekursion sondern nur eine korrekt aufgebaute Schleife und eine if-abfrage an der richtigen stelle.

Edit: Haha jetzt wo ich die Aufgabenstellung lese, wird es mir sofort ersichtlich was du solltest :)
Zuletzt geändert von JonasR am Mittwoch 27. Juni 2012, 21:45, insgesamt 1-mal geändert.
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Ein Paar Anmerkungen:

* global ist böse
* mutable (wie z.B. Listen in Funktionsdefinitionen) sind böse
* nicht laufbaren Code posten ist böse

* PEP-8 ist gern gesehen


Ich denke dein Problem liegt zumindest schonmal darin, dass du eine Liste als Defaultargument einer Funktion hast. Google mal danach.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
waki
User
Beiträge: 133
Registriert: Dienstag 9. März 2010, 16:41

hab alle 3 Fehlerpunkte behoben und es funktioniert, es lag an den mutable. Danke für die Hilfe
BlackJack

@waki: „Rekursive Schleife” ist irgendwie ein Widerspruch in sich. Entweder Du hast eine Schleife oder Du hast Rekursion. Was Du da selber bastelst, ist jetzt aber nicht die `itertools.combinations()`-Funktion, oder‽

Code: Alles auswählen

In [12]: names
Out[12]: {'Name1': 0, 'Name3': 0, 'Name4': 0, 'Name5': 0, 'Name6': 0, 'name2': 0}

In [13]: list(itertools.combinations(names.keys(), 3))
Out[13]: 
[('Name6', 'Name4', 'Name5'),
 ('Name6', 'Name4', 'name2'),
 ('Name6', 'Name4', 'Name3'),
 ('Name6', 'Name4', 'Name1'),
 ('Name6', 'Name5', 'name2'),
 ('Name6', 'Name5', 'Name3'),
 ('Name6', 'Name5', 'Name1'),
 ('Name6', 'name2', 'Name3'),
 ('Name6', 'name2', 'Name1'),
 ('Name6', 'Name3', 'Name1'),
 ('Name4', 'Name5', 'name2'),
 ('Name4', 'Name5', 'Name3'),
 ('Name4', 'Name5', 'Name1'),
 ('Name4', 'name2', 'Name3'),
 ('Name4', 'name2', 'Name1'),
 ('Name4', 'Name3', 'Name1'),
 ('Name5', 'name2', 'Name3'),
 ('Name5', 'name2', 'Name1'),
 ('Name5', 'Name3', 'Name1'),
 ('name2', 'Name3', 'Name1')]
Antworten