Seite 1 von 1

Anfängerin braucht hilfe bei Rekursion-Funktion

Verfasst: Mittwoch 24. November 2021, 22:42
von Annadiz
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.

Re: Anfängerin braucht hilfe bei Rekursion-Funktion

Verfasst: Mittwoch 24. November 2021, 22:51
von Dennis89
Hallo,

wo hast du denn genau die Probleme?
Wie weit bist du?

Grüße
Dennis

Re: Anfängerin braucht hilfe bei Rekursion-Funktion

Verfasst: Mittwoch 24. November 2021, 23:02
von Annadiz
Ich weiß überhaupt nicht wie ich da vorgehen muss bzw anfangen kann.

def checksum(n)
if n > 0
return += n

print(checksum(780))

das war das aller erste was ich probiert hab .... naturlich ist das falsch ;(

Re: Anfängerin braucht hilfe bei Rekursion-Funktion

Verfasst: Mittwoch 24. November 2021, 23:21
von /me
divmod wäre da ein Ansatz.

Code: Alles auswählen

>>> divmod(5342, 10)
(534, 2)
>>> quotient, remainder = divmod(923587, 10)
>>> quotient
92358
>>> remainder
7
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?

Re: Anfängerin braucht hilfe bei Rekursion-Funktion

Verfasst: Mittwoch 24. November 2021, 23:22
von Dennis89
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:

Code: Alles auswählen

7
8
0
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

Re: Anfängerin braucht hilfe bei Rekursion-Funktion

Verfasst: Mittwoch 24. November 2021, 23:50
von rogerb
@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.

Code: Alles auswählen

def addieren(zahlen):
    if not zahlen:
        return 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:

Code: Alles auswählen

def addieren(zahlen):
    if not zahlen:
        return 0
        
    return zahlen[0]
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:

Code: Alles auswählen

def addieren(zahlen):
    if not zahlen:
        return 0

    return zahlen[0] + addieren(zahlen[1:])
Das ist der Rekursionsschritt.

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)
Huch, das war's schon!

Re: Anfängerin braucht hilfe bei Rekursion-Funktion

Verfasst: Donnerstag 25. November 2021, 07:00
von Ahris
Hallöchen.
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))
Dabei kann man die Zahl als einzelnen Integer schreiben und muss ihn nicht als Liste übergeben.

Nicht sehr ellegant, aber es funktioniert.

Re: Anfängerin braucht hilfe bei Rekursion-Funktion

Verfasst: Donnerstag 25. November 2021, 07:59
von Sirius3
@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?

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))
In dieser Lösung fehlt jetzt aber die Rekursion.

Re: Anfängerin braucht hilfe bei Rekursion-Funktion

Verfasst: Donnerstag 25. November 2021, 08:05
von Ahris
Naja bin selbst noch Anfänger. Die meisten Tricks die andere nutzen kenn ich noch nicht.

Re: Anfängerin braucht hilfe bei Rekursion-Funktion

Verfasst: Donnerstag 25. November 2021, 12:30
von __blackjack__
@Ahris: Da war jetzt kein ”Trick” dabei.

Re: Anfängerin braucht hilfe bei Rekursion-Funktion

Verfasst: Freitag 26. November 2021, 09:21
von /me
Ahris hat geschrieben: Donnerstag 25. November 2021, 07:00 Mein Ansatz wäre der hier:

[...]
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.