Aufgabe 11.5

11.5 a) Rekursion

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Aufgabe 11.5
Hallo,

stehe irgendwie auf dem Schlauch. Bekomme bei meiner enumPaths die Rekusion irgendwie nicht hin.

for(x<-als(0)) enumPaths("blabla")

wieso wird mir hier type mismatch; found : Unit required: List[Int] angegeben?

Gebe ich nur enumPaths(“Blabla”) an gehts, aber ich möchte ja in meinem Fall für jede Abzweigung einmal die Rekursion starten, also dachte ich eben ein for über als würde das regeln. Es sollte doch enumPaths mit jweils einer “Abzweigung” aufrufen?

Hoffe jm. versteht mein Problem und kann mir vllt einen kleinen Schubser geben.
Danke!


Falls es etwas unverständlich ist hier mein Pseudocode:

enumPaths{
     Wenn n == 0 wars das
     if(d in den besuchten Knoten) {
          den Weg dahin ausgeben
     }else{
          Rekursionsaufruf mit allen möglichen Pfraden vom aktuellen Knoten aus
     }
}

Das liegt daran, dass Scala immer den letzten Wert zurückgibt. Da allerdings nach deiner Schleife nichts steht, kommt diese Fehlermeldung zustande → Rückgabewert fehlt.

Wenn dir der Rückgabewert erstmal egal ist, kannst du unter der Schleife ja einfach mal “Nil” schreiben und deinen Code weiterschreiben.


Ich komm dann aber einfach nicht drauf wie der Rekursive Aufruf nun funktionieren soll …


Probier’s mal mit yield enumPaths, dann wird für jedes als(0) enumPaths ausgeführt, also hast du deine Rekursion :slight_smile: (ohne deinen restlichen Code zu kennen)


Mit yield machts ja aber dann eine Liste draus, dann sagts mir dass List[List[Int]] rauskommt aber List[Int] erwartet wird…


Ja, dementsprechend musst du da auch noch etwas rumbasteln. Versuchs mal mit einer Hilfsfunktion.


.flatten ist das was du suchst.


1000 Dank!


Bei SCALA dürfen wir ja Hilfsfunktionen erstellen oder?

Habe jetzt meiner Meinung nach alles richtig & meine Testcases laufen, habe aber ein rotes Ausrufezeichen…


Ja, am besten die Hilfsfunktion innerhalb der Funktion selbst erstellen

Ansonsten: kein mutable (var), methoden Signaturen nicht verändert? (Richtig geschrieben?)


Hab die Hilfsfunktion jetzt direkt in den Code wieder umgeschrieben, hab ansonsten auch keine var & keine Signaturen verändert.

komisch…