PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Iteratives Programmieren



steve-e
13-05-2005, 15:36
Hi,

ich lese gerade das Buch "Struktur und Interpretation von Computerprogrammen" und hab Probleme mit einigen darin gestellten Aufgaben.

Da Scheme verwendet wird, wird viel über Rekursion und rekursive Prozesse gemacht und das ist mir auch soweit alles klar, Probleme bekomm ich aber bei iterativen Algorithmen.



f(n) = n falls n<3
und
f(n) = f(n-1) + 2f(n-2) + 3f(n-3) falls n>=3


Den rekursiven Algorithmus konnte ich schnell verfassen, doch ich schaffe es irgendwie nicht den Iterativen zu formulieren.
Kann mir evtl. jemand auf die Sprünge helfen? Wie geht man ein solches Problem am Besten an, auf was sollte man achten.


Danke für die Hilfe,
steve

moedule
15-05-2005, 18:19
ich verrate dir mal die lösung noch nicht ... aber du mußt entsprechend 3 hilfsvariablen einführen und dann einfach nur jeweils die werte weitergeben (von einer zur anderen)

falls du wirklich nicht selber draufkommst ... hier (http://leia.physik.uni-konstanz.de/~bubek/tmp/alg.cpp) in c++

moe

BeS
16-05-2005, 12:42
Naja, klassische Variablen verwendet man in scheme normal nicht.

Der übliche Weg iterative Prozesse zu erzeugen ist normal durch Endrekursionen (ich verwende dafür gerne named-let).

Hier mal ein einfaches Beispiel, vielleicht hilft es dur weiter und du kannst es auf deine Funktion übertragen:

Rekursion -> rekursiver Prozess


(define (rekursion n)
(cond ((= n 0) 0)
(#t (+ 1 (rekursion (- n 1))))))


Endrekursion -> iterativer Prozess


(define (endrekursion n)
(let loop ((count n)(result 0))
(cond ((= count 0) result)
(#t (loop (- count 1) (+ result 1))))))

steve-e
16-05-2005, 16:04
Danke schonmal für die Antworten, hab nur jetzt leider keine Zeit mich damit recht zu befassen.

Wenn ich mir es in den nächsten Tagen noch etwas näher zu Gemüte geführt habe, melde ich mich nochmal hier.

*edit*
So, hab eben erstma ein anderes Problem gelöst. Hierbei ging es um die sukzessive Quadratbildung, die ich jedoch jetzt doch recht stupide in einen iterativen Prozess verpacken konnte. Manchmal ist man echt Betriebsblind.

Dieser Funktion widme ich mich dann morgen.