Seite 2 von 2

Re: Rekursive Funktion

Verfasst: Dienstag 29. Mai 2018, 09:44
von StareDog
mhm, klingt natürlich logisch. wie ich das in meinen code implementiere, ist mir nicht klar

Re: Rekursive Funktion

Verfasst: Dienstag 29. Mai 2018, 10:30
von StareDog

Code: Alles auswählen

def maximum(a,p):                   #Liste a mit Länge p (len(a)=p)
    if p==1 :                        #ist nur ein Element in der Liste
        return a[0]
    else:
        maxi = max(a[1:p+1])         #Suche maximum von a[1] bis a[p]
        if a[0] > maxi :           #prüfe ob gefundenes Element a[maxi] > a[0] ist
            return a[0]
        else:
            return maxi
das hat mir meine Übungspartnerin geschickt. ist das richtig? es scheint zwar die richtige Lösung auszuspucken, aber der rekursive ansatz. ich versteh nicht, wenn return maxi eintritt. wird dann überhaupt das maxi mit dem vorherigen maxi verglichen?

Re: Rekursive Funktion

Verfasst: Dienstag 29. Mai 2018, 10:47
von Sirius3
@StareDog: das ist keine Rekursive Funktion, weil maximum ja nirgends aufgerufen wird, fasst man die vielen if-Blöcke zusammen, ergibt sich nämlich:

Code: Alles auswählen

def maximum(a,p):
    return max(a[:p+1])

Re: Rekursive Funktion

Verfasst: Donnerstag 31. Mai 2018, 10:27
von StareDog
da hast du natürlich recht, blödsinn.

was haltet ihr von dieser Lösung? Ist das eine rekursive Funktion und was hättet ihr noch für bessere lösungsansätze. Hab jetzt die schlechte Lösung abgegeben, weil ich keine Zeit mehr hatte, aber mich gerade nochmal rangesetzt um zu verstehen wie es besser gehen könnte.

Code: Alles auswählen

a = [5,6,7,2,3,2,5,3,7,3,2,7,8]
def maximum(a,p):
    if p<0:
        raise ValueError("cannot find maximum of an empty sequence")
    elif p==0:
        return a[p]
    else:
        if maximum(a,p-1)<a[p]:
            return a[p]
        else:
            return maximum(a,p-1)

print(maximum(a,1))

Re: Rekursive Funktion

Verfasst: Donnerstag 31. Mai 2018, 13:08
von Sirius3
Gut, bis auf die quadratische Laufzeit. Du berechnest jeweils zwei mal das Maximum a bis p-1.

Re: Rekursive Funktion

Verfasst: Donnerstag 31. Mai 2018, 15:06
von StareDog

Code: Alles auswählen

if maximum(a,p-1)<a[p]:
            return a[p]
        else:
            return maximum(a,p-1)
du meinst hier return maximum(a,p-1) ist überflüssig? also er rechnet oben das maximum(a,p-1) aus und im else-block noch einmal. geht das mit einer speichervariable?

Code: Alles auswählen

a = [5,6,7,2,3,2,5,3,7,3,2,7,8]
def maximum(a,p):
    if p<0:
        raise ValueError("cannot find maximum of an empty sequence")
    elif p==0:
        return a[p]
    else:
        b = maximum(a,p-1)
        if maximum(a,p-1)<a[p]:
            return a[p]
        else:
            return b

print(maximum(a,6))
Idee war, maximum(a,p-1) wird gespeichert und dann nur noch ausgegeben, anstatt wieder die funktion an dieser stelle wieder neu zu berechnen.

Re: Rekursive Funktion

Verfasst: Donnerstag 31. Mai 2018, 15:10
von Sirius3
Die Idee ist richtig, aber nur halb umgesetzt.

Re: Rekursive Funktion

Verfasst: Samstag 2. Juni 2018, 14:50
von StareDog

Code: Alles auswählen

a = [5,6,7,2,3,2,5,3,7,3,2,7,8]

def maximum(a,p):
    if p<0:
        raise ValueError("cannot find maximum of an empty sequence")
    elif p==0:
        return a[p]
    else:
        b = maximum(a,p-1)
        c = a[p]
        if b<c:
            return c
        else:
            return b

print(maximum(a,6))
stimmt, ich glaube jetzt hab ich es! Vielen Dank für deine Hilfe!