Autor Beitrag
Noobthefirst
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mi 14.06.17 06:21 
Hallo liebes Forum :-) ! Dies hier ist mein erster Beitrag hier und ich bin gerade sehr sehr verzweifelt. Es geht um die Lösung einer Aufgabe, bei der ich gerade vor einer sprichwörtlichen Wand stehe. Wenn ihr mir dabei irgendwie helfen könntet wäre ich extrem dankbar.

Die Aufgabe lautet wie folgt:
Eine allgemeine lineare Rekursion, d.h. eine Rekursion mit nur einem rekursiven Aufruf, hat die untenstehende Form. Dabei sind Problem und Loesung zwei Typen, die alle notwendigen Informationen enthalten.
Schreiben Sie, unter Verwendung eines Stacks und der unten zur Verfügung gestellten Zeile, eine iterative Funktion, die die gleiche Berechnung durchführt, wie die dargestellte rekursive Funktion.
Geben Sie die Lösung durch jeweils ein Leerzeichen getrennt ein (Lösung unter Angabe der Zahlen/Buchstabenangabe die jeweils vor den Zeilen unten stehen). Verwenden Sie nur Grossbuchstaben und ergänzen Sie geschweifte schliessende und öffnende Klammmern, wo sie nach den üblichen Regeln benötigt werden.

Loesung funktion(Problem X) {
if ( klein(X) ) {
return berechneLoesung(X);
}else{
Problem Xk = macheKlein(X);
Loesung Yk = funktion(Xk);
return kombiniereLoesung(X,Yk);
}
}



Zur Verfügung gestellte Zeilen:
1 Y = berechneLoesung(X);
2A Y = kombiniereLoesung(X,Y);
2B X = kombiniereLoesung(X,Y);
3A S.push(X);
3B S.top(X);
4 X = macheKlein(X);
5 return Y;
6A X = S.top();
6B X = S.pop();
7 while (!S.isempty())
8A while( !klein(X) )
8B while( klein(X) )
9 S = new Stack();
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Chefentwickler
Beiträge: 20016
Erhaltene Danke: 1843

Win 10
C# (VS 2015)
BeitragVerfasst: Mi 14.06.17 09:28 
Hallo und :welcome:!

Bei uns gilt generell, dass wir Dir gerne helfen, selber die Lösung zu finden. Aber Du musst schon Eigeninitiative zeigen. Das heißt insbesondere, dass Du zumindest mal sagen musst, was Du bisher versucht hast, welche Ansätze Du verfolgt hast, wo Du nicht weiter kommst, was konkret Du nicht verstehst, etc. ...

Viele Grüße
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".

Für diesen Beitrag haben gedankt: Noobthefirst
Noobthefirst Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mi 14.06.17 10:28 
Hallo Christian,
vielen Dank für deine schnelle Antwort :-) !!! Mein Problem ist das mir der Einstieg in die Lösung fehlt bzw. wie die iterative Funktion aufgebaut sein muss damit diese dementsprechend so oft wiederholt wird, dass am Ende die Lösung vorhanden ist. Mir fehlt die zündende Idee für die Architektur, da ich leider Probleme habe die genaue Aufgabenstellung zu verstehen
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1455
Erhaltene Danke: 252

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Mi 14.06.17 10:48 
Guten Tag Noobthefirst,

weisst du denn, was mit Rekursion und Iteration (.pdf) gemeint ist?
Vielleicht wird dir dann klarer, wie die Funktionen aussehen können.

_________________
„Wo andere blind der Wahrheit folgen, denk daran ... Nichts ist wahr!" (Assassin's Creed I-II)

Für diesen Beitrag haben gedankt: Noobthefirst
Noobthefirst Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mi 14.06.17 10:59 
Hey Frühlingsrolle,
danke für deinen Link ;-) ...das Dokument habe ich mir auch schon zur Hand genommen und dadurch ist mein Grundverständnis bestätigt worden. Leider geht es über dieses Grundverständnis nicht hinaus :-( . Grundsätzlich weiß ich was eine Rekursion oder Iteration ist, tue mich aber schwer dies umzusetzen. Einzelne Bausteine kann ich von Ihrer Bedeutung her zuordnen, diese aber nicht logisch miteinander verbinden
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1455
Erhaltene Danke: 252

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Mi 14.06.17 11:37 
Na gut, dann eben etwas genauer. Im verlinkten PDF wird ein Beispiel angeführt, welches rekursiv und iterativ von 1 bis 10 hochzählt:
ausblenden Python-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
// rekursiv ... das ist bei dir gegeben
def count(zahl, max):
  if zahl > max: return
  else:
    print zahl
    count(zahl + 1, max)

// iterativ ... das sollst du erreichen
def count(zahl, max):
  while zahl <= max:
    print zahl
    zahl = zahl + 1

Das ist schon fast die Lösung.

_________________
„Wo andere blind der Wahrheit folgen, denk daran ... Nichts ist wahr!" (Assassin's Creed I-II)
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1340
Erhaltene Danke: 188


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Mi 14.06.17 22:41 
Den simpelsten und am leichtesten verständlichen Einstieg in das Wechselspiel zwischen Iteration und Rekursion bietet m.E. die Fakultät: Diese kann sowohl iterativ als auch rekursiv definiert und auch implementiert (=programmiert) werden. Die Definition beider findet sich an vielen Stellen in der Literatur und auch im Internet. Beides auch einmal selbst zu implementieren zu versuchen, dann fällt oft schon der Groschen.