Seite 1 von 1

Rekursionsaufgaben

Verfasst: Freitag 2. Juli 2021, 10:40
von Tyroun
Hey,

ich habe zwei Aufgabe zur Rekursion die ich zur Übung lösen wollte und komme nicht weiter bzw. hab gedacht ich hab sie richtig gelöst aber es kommen Fehlermeldungen.

Die 1 Aufgabe war, eine rekursive Funktion zu schreiben, welche eine Liste als Input (mit Buchstaben in dem Fall) bekommt und einen Buchstaben. Die Funktion soll nun rekursiv den Buchstaben, welcher übergeben wurde aus der Übergebenen Liste löschen (alle die vorkommen) z.B. ["t","e","s","t"] man übergibt "t" und dann soll als die Liste am Ende so aussehen: ["e","s"].
Ich hab das mit folgenden Code realisieren:

Code: Alles auswählen

def entferne_Alles(n,arr):
    if arr == []:
        return
    else:
        if arr[0] == n:
            return entferne_Alles(n,arr[1:])
        else:
            return arr[0] + entferne_Alles(n,arr[1:])
wenn ich das nun ausführe kommt folgender Fehler:
[Previous line repeated 1 more time]
TypeError: can only concatenate str (not "NoneType") to str

Ausgeführt habe ich es so:

Code: Alles auswählen

liste = ["e","l","i","a","s","e"]
print(entferne_Alles("e",liste))
Die Aufgabe 2 war, ich übergebe eine Liste mit Integern und eine Zahl. Die funktion soll rekursiv die übergebene Zahl auf die Integer in der Liste addieren.
Also z.B. [0,0,0] ist die List und 3 die übergebene Zahl, dann soll als Ergebnis das kommen => [3,3,3]

Code: Alles auswählen

def addieren(n,arr):
    if len(arr) > 0:
        return [arr[0] + n] + addieren(n,arr[1:])
aufgerufen hab ich es mit folgenden Code:

Code: Alles auswählen

arr = [0,0,0,0,0,0]
print(addieren(3,arr))
Dann kommt aber die gleiche Fehlermeldung wie ob:
[Previous line repeated 3 more times]
TypeError: can only concatenate list (not "NoneType") to list


Könnte mir jemand bei dem Problem helfen und mir sagen was ich falsch gemacht habe? Also kann es sein, dass irgendwas mit der Abbruchbedingung nicht stimmt?

LG

Re: Rekursionsaufgaben

Verfasst: Freitag 2. Juli 2021, 10:59
von Sirius3
Ja, es stimmt etwas mit dem letzten Rekursionsschritt nicht. Und was nicht stimmt, steht ja in der Fehlermeldung: Du gibst None zurück, und damit kann der vorherige Schritt nichts anfangen.

Re: Rekursionsaufgaben

Verfasst: Freitag 2. Juli 2021, 11:28
von __blackjack__
@Tyroun: Geh für den ersten Fall doch mal manuell einen wirklich supersimplen Fall durch: alls "x" aus einer leeren Liste entfernen: ``ergebnis = entferne_Alles("x", [])``. Was müsste das als Ergebnis liefern und was liefert das stattdessen.

Re: Rekursionsaufgaben

Verfasst: Freitag 2. Juli 2021, 12:16
von Tyroun
hey,
vielen Dank schonmal für die Antworten.

@__blackjack__ : also wenn ich eine leere Liste übergebe müsste ja eigentlich dann auch eine leere Liste als rückgabewert sein, deshalb habe ich bei statt nur return => return [], also eine leere Liste zurückgeben lassen, dies funktioniert für den den Fall das ich eine leere Liste übergebe, aber nicht mit einer Liste in der was drin steht.

Aber eigentlich ist das zurückgeben einer leeren Liste dann richtig oder ?

Re: Rekursionsaufgaben

Verfasst: Freitag 2. Juli 2021, 14:37
von __blackjack__
@Tyroun: Wenn man aus einer leeren Liste irgendwas entfernen will, dann ist das Ergebnis eine leere Liste, das ist richtig.

Wenn in der Liste etwas drin steht (und das nicht das ist was entfernt werden soll), dann bekommst Du eine weitere Ausnahme. Diesmal eine andere aus einem anderen Grund.

Re: Rekursionsaufgaben

Verfasst: Samstag 3. Juli 2021, 08:40
von Tyroun
Guten Morgen,

Vielen Dank für die Hilfe ich habe es jetzt dadurch geschafft.

LG