Stack (Kellerspeicher) mir Vorfaktor

Neue Frage »

Auf diesen Beitrag antworten »
gutenmorgenuhu Stack (Kellerspeicher) mir Vorfaktor

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;         
 
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »