Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Algorithmen » Stack (Kellerspeicher) mir Vorfaktor » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Stack (Kellerspeicher) mir Vorfaktor
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
gutenmorgenuhu
Grünschnabel


Dabei seit: 03.07.2014
Beiträge: 1

Stack (Kellerspeicher) mir Vorfaktor Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Liebe Gemeinde,

ich habe die rekursive Funktion f (s.u) in eine iterative umgewandelt. Dafür verwende ich einen Stack. Das Ganze funktioniert ganz passabel. Allerdings habe ich ein Problem.

Wie ihr seht, besteht der return-Wert von f aus einer Summe, wobei der erste Summand mit zwei multipliziert wird.
Das habe ich in der iterativen Funktion so gelöst, dass ich einfach zwei mal die Variable in den Stack pushe. Das funktioniert, ist aber nicht unbedingt übertragbar. Wenn der Vorfaktor nun nicht 2, sondern von mir aus 0,55 oder Wurzel 2 wäre, habe ich ein Problem.

Wie kann man sowas lösen?
Ich würde ungern eine weitere Information mit in den Stack packen, außer die Variable an sich.

Evtl. kann jemand mal drüber schauen und mir helfen.

Vielen Dank im Voraus.

Rekursive Funktion
code:
1:
2:
3:
4:
5:
Function f(n:integer) : Integer;
begin
     if (n<=2) then  return n
     else return 2*f(n-1)+f(n-3);
     end;    



Iterative Funktion
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
Function fIt (n:Integer) : Integer;

// Ich bin der iterative Algorithmus von f mit einem Kellerspeicher
         var nVar, erg:Integer;
begin
     nVar := n;
     erg  := 0;

     push(nVar, stack);

     while (high(stack) >= 1) do begin
           nvar := stack[high(stack)];
           pop(stack);

           if (nVar <= 2) then erg := erg+nVar
           else begin
             // Den Faktor 2 habe ich einfach durch doppeltes pushen implementiert
             // Wenn hier etwas anderes Stünde wie Wurzel 2 o.ä. wäre ich allerdings
             // derzeit noch überfragt, wie man das verwirklicht
             push(nVar-1, stack);
             push(nVar-1, stack);
             push(nVar-3, stack);
           end;
     end;
     return erg;

end;         

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von gutenmorgenuhu: 03.07.2014 20:33.

03.07.2014 20:32 gutenmorgenuhu ist offline Beiträge von gutenmorgenuhu suchen Nehmen Sie gutenmorgenuhu in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » Algorithmen » Stack (Kellerspeicher) mir Vorfaktor