Hey ich will mit Hilfe von rekursion eine Funktion schreiben.
Mein Ziel ist es, dass wenn ich ZUM BEISPIEL 8765 für n einsetzte, 8+7+6+5 = 26 berechnet wird.
Es sollen nur positive, ganze zahlen übergeben werden.
Anfängerin braucht hilfe bei Rekursion-Funktion
divmod wäre da ein Ansatz.
So kommst du schon mal an einzelne Ziffern. Jetzt musst du nur noch Rekursion verwenden und eine geeignete Abbruchbedingung formulieren.
Deinem gezeigten Codeschnipsel nach fehlen dir übrigens absolute Grundlagen. Um Python zu lernen ist dieses Forum allerdings nicht der geeignete Ort. Vielleicht magst du mal ins offizielle Tutorial schauen?
Code: Alles auswählen
>>> divmod(5342, 10)
(534, 2)
>>> quotient, remainder = divmod(923587, 10)
>>> quotient
92358
>>> remainder
7
Deinem gezeigten Codeschnipsel nach fehlen dir übrigens absolute Grundlagen. Um Python zu lernen ist dieses Forum allerdings nicht der geeignete Ort. Vielleicht magst du mal ins offizielle Tutorial schauen?
Zuletzt geändert von /me am Mittwoch 24. November 2021, 23:29, insgesamt 1-mal geändert.
Ausgeschrieben würde 'return += n' bedeuten: 'return = return + n'.
Weist du was return macht?
Wieso prüfst du ob n größer 0 ist? (Die Doppelpunkte würden aber noch fehlen)
Du musst jetzt dein Problem zerlegen. Erstelle mal eine Funktion die 780 übergeben bekommt(so wie du es schon hast) und dann folgende Ausgabe macht:
Wenn es zu Fehlern kommt, zeig uns bitte die Fehler und den Code dazu. Am besten du nutzt den vollständigen Editor und die Code-Tags (</> - Button).
Grüße
Dennis
Weist du was return macht?
Wieso prüfst du ob n größer 0 ist? (Die Doppelpunkte würden aber noch fehlen)
Du musst jetzt dein Problem zerlegen. Erstelle mal eine Funktion die 780 übergeben bekommt(so wie du es schon hast) und dann folgende Ausgabe macht:
Code: Alles auswählen
7
8
0
Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
@Annadiz,
Bei Rekursionen geht es darum ein großes Problem in immer kleinere Teilprobleme zu zerlegen, bis die Lösung trivial ist.
Der trivialste Fall wäre eine leere Liste. Dann ist die Summe nämlich 0.
Wenn man sein Problem so weit zerkleinert hat, kann man aufhören. Das nennt man den Rekursionsanker.
Um dorthin zu kommen muss man das Problem in Teilprobleme zerlegen.
Also die Summe muss schonmal mindestens so groß sein wie die erste Zahl:
Das klappt schon ganz gut für Listen die kein, oder nur ein Element enthalten.
Und ich weiß ja auch noch das die Gesamtsumme die erste Zahle plus dem ganzen komplizierten Rest sein muss:
Das ist der Rekursionsschritt.
Jetzt noch die Funktion aufrufen:
Huch, das war's schon!
Bei Rekursionen geht es darum ein großes Problem in immer kleinere Teilprobleme zu zerlegen, bis die Lösung trivial ist.
Der trivialste Fall wäre eine leere Liste. Dann ist die Summe nämlich 0.
Code: Alles auswählen
def addieren(zahlen):
if not zahlen:
return 0
Um dorthin zu kommen muss man das Problem in Teilprobleme zerlegen.
Also die Summe muss schonmal mindestens so groß sein wie die erste Zahl:
Code: Alles auswählen
def addieren(zahlen):
if not zahlen:
return 0
return zahlen[0]
Und ich weiß ja auch noch das die Gesamtsumme die erste Zahle plus dem ganzen komplizierten Rest sein muss:
Code: Alles auswählen
def addieren(zahlen):
if not zahlen:
return 0
return zahlen[0] + addieren(zahlen[1:])
Jetzt noch die Funktion aufrufen:
Code: Alles auswählen
def addieren(zahlen):
if not zahlen:
return 0
return zahlen[0] + addieren(zahlen[1:])
summe = addieren([8, 7, 6, 5])
print(summe)
Hallöchen.
Mein Ansatz wäre der hier:
Dabei kann man die Zahl als einzelnen Integer schreiben und muss ihn nicht als Liste übergeben.
Nicht sehr ellegant, aber es funktioniert.
Mein Ansatz wäre der hier:
Code: Alles auswählen
def checksum(number):
if number > 0:
number = str(number)
sum = 0
for i in number:
sum += int(i)
return sum
else:
return None
print (checksum(2345))
Nicht sehr ellegant, aber es funktioniert.
@Ahris: um Fehler zurückzumelden, sind Exceptions besser als None. `sum` ist der Name der `sum`-Funktion, die man hier gut einsetzen könnte. Warum darf man von 0 nicht die Quersumme bilden?
In dieser Lösung fehlt jetzt aber die Rekursion.
Code: Alles auswählen
def checksum(number):
if number < 0:
raise ValueError("number must not be negative")
return sum(int(digit) for digit in str(number))
- __blackjack__
- User
- Beiträge: 13110
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Ahris: Da war jetzt kein ”Trick” dabei.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Dein Ansatz ist prinzipiell logisch - nur etwas kompliziert codiert - erfüllt allerdings nicht die Forderung nach einer rekursiven Lösung. Es ist auch keine gute Idee, die von Python als Builtin bereitgestellte Funktion sum mit einer Variable eigenen Namens zu überschreiben.