Rekursiv programmieren (integerbaum)
- __blackjack__
- User
- Beiträge: 13111
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@d_rose: Wo zählst Du da 5 Elemente? Kannst Du die bitte mal konkret auflisten und wie Du darauf kommst?
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Sorry nehme es zurück. Hab mich verguckt:__blackjack__ hat geschrieben: ↑Mittwoch 21. November 2018, 19:39 @d_rose: Wo zählst Du da 5 Elemente? Kannst Du die bitte mal konkret auflisten und wie Du darauf kommst?
Jetzt will ich nicht unverschämt rüberkommen , aber wie definiere ich die Bedingung , "wenn der baum ein Blatt ist".__deets__ hat geschrieben: ↑Mittwoch 21. November 2018, 15:14 Du baust das ganze nicht rekursiv auf. Du versuchst stattdessen, da irgendwie durch eine Betrachtung des Ganzen weiter zu kommen. Das kann zum Ziel fuehren, soll es aber nicht - du sollst ja lernen, rekursive Strukturen zu verarbeiten und mental in die richtigen, rekursiven Funktionsaufrufe einzusortieren.
Und da sieht das ganze dann anders aus:
- gegeben ein baum, und eine tiefe n
- wenn der baum ein Blatt ist, dann liefere n * baum zurueck.
- sonst teile den baum in links, rechts, mitte auf, und liefere n * mitte + rekursion(links, n + 1) + rekursion(rechts, n + 1) zurueck.
Damit habe ich dir fast schon den Code geliefert.
Also was ist das Kriterium für ein Blatt.
Code: Alles auswählen
a = ((111,-16,-26),81,-7)
def summiere (baum,ebene):
summe = 0
y = 0
x = 0
z = 0
if isinstance(baum,int) == True :
summe = baum * ebene
else :
x , y , z = baum
return (y * ebene + summiere(x,ebene+1) + summiere(z,ebene+1))
print(summiere(a,1))
Bitte zerstört mich nicht haha
Jetzt haut der mir den Error raus : Maximum recursion depth exceeded while calling a python object
ach deets ach, ich danke dir vielmals ich würde dich ja gerne für Nachhilfe bezahlen aber wahrscheinlich wohnen wir viel zu weit entfernet voneinander.
wenn du mir erklären könntest warum die 4 Variablen unnötig waren, würde ich mich sehr freuen.
wenn du mir erklären könntest warum die 4 Variablen unnötig waren, würde ich mich sehr freuen.
Sie werden halt nicht gebraucht. Die x, y, z (ganz miese Namen, sollten besser zb teilbaum_links, wurzel, teilbaum_rechts) sein werden durch das Tupel unpacking erzeugt und Summe ist auch nuztlos - warum hat was mit den returns zu tun.
- __blackjack__
- User
- Beiträge: 13111
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@d_rose: Das kommt weil das ``return`` an der falschen Stelle steht.
Das ``== True`` macht man nicht, weil das sinnlos ist. `isinstance()` gibt ja schon `True` oder `False` zurück. Wenn man `True` mit `True` vergleicht, kommt da bloss wieder `True` heraus, und wenn man `False` mit `True` vergleicht, kommt da wieder `False` bei heraus. Man kann also gleich den Wert nehmen, den man sowieso schon hat.
Das ``== True`` macht man nicht, weil das sinnlos ist. `isinstance()` gibt ja schon `True` oder `False` zurück. Wenn man `True` mit `True` vergleicht, kommt da bloss wieder `True` heraus, und wenn man `False` mit `True` vergleicht, kommt da wieder `False` bei heraus. Man kann also gleich den Wert nehmen, den man sowieso schon hat.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman