BPS #8: Rekursiv zu Iterativ - Auswertung
Übersicht

![]() |
HolzchopfMeisterpackerBetreff: BPS #8: Rekursiv zu Iterativ - Auswertung |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jetzt zeigt sich, wer in den Katakomben der Rekursion den Durchblick hatte!
Das war die Aufgabe Postet hier eure Ergebnisse, Codes, Gedanken. Lernt von den anderen, seht euch deren Quelltext an und versucht euren eigenen zu verbessern. Diskussion Postet zu euren Codes stets eine kurze Erklärung mit euren Gedanken in denen ihr simpel gesagt die Frage "Wieso habe ich XY auf diese Art gelöst?" beantwortet. Beiträge, die nur den Code enthalten werden wir aus dem Thread entfernen. Musterlösung: BlitzMax: [AUSKLAPPEN] Local i:Int |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
- Zuletzt bearbeitet von Holzchopf am Di, Jun 14, 2011 19:53, insgesamt einmal bearbeitet
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
BlitzMax: [AUSKLAPPEN] Function fib_iterativ(n:Int) Ist das nicht eher "instant"? Iterativ wäre das hier: BlitzMax: [AUSKLAPPEN] Function fib_iterativ:Int(n:Int) (Anmerkung durch Kommentarregel: Bei der Fibonacci-Folge werden zur Berechnung eines neuen Folgengliedes immer nur die beiden Vorgänger betrachtet. Also werden nur 2 Variablen + eine Tauschvariable gebraucht, um die Werte zu berechnen.) Wenn ich gerade schon dabei bin: BlitzMax: [AUSKLAPPEN] Function func1_iterativ(n:Int) Dazu gibt es auch eine instant-Lösung. BlitzMax: [AUSKLAPPEN] Function func1_instant:Int(n:Int) Meine Gedanken zu dem hier: "Der junge Gauß hatte einmal eine entsprechende Hausaufgabe elegant gelöst." mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
BlitzMoritz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zunächst die Lösung der beiden "Pflichtaufgaben", wobei mir angesichts ihrer Kürze und Einfachheit nicht mehr Erklärung notwendig erscheint als der Hinweis, dass man bei der iterativen Funktion jenen fortgeschrittenen Zustand, den man ansonsten als Argument der rekursiv aufgerufenen Funktion weitergeben würde, in einer separaten Variable speichert und ihn pro Schleifendurchgang aktualisiert. Bei den Fibonacci-Zahlen ist es ein Duo aus zwei solcher Variablen, die in einem "Ringtausch" weitergegeben werden.
Als jeweils dritte Funktion habe ich mir nicht nehmen lassen, weder Rekursionen noch Iterationen, sondern einfach die entsprechende Summenformel zu verwenden, von denen man die zur ersten Aufgabe leicht selbst herleiten kann und jene von Moivre-Binet im Wikipedia-Artikel über Fibonacci-Zahlen zu finden ist. Zuerst hatte ich bei der Formel von Moivre-Binet Bedenken, ob der (ungenaue) Floatwert für die Wurzel von Fünf Schwierigkeiten beim Ergebnis bereiten würde, welches ja aus einer natürlichen Integerzahl besteht, was sich allerdings überraschender Weise nicht herausstellte: BlitzMax: [AUSKLAPPEN] '1.Aufgabe: Nun zur selbst gestellten dritten Aufgabe, bei der ich mich dazu zwang, eine Rekursion, die sich nicht einmal, sondern zweimal selbst aufruft, ebenfalls durch eine iterative Funktion zu ersetzen. Statt wie anfangs geschildert eine feste Anzahl von einer oder zwei Speichervariablen zu verwenden, verdoppelte sich hier die Anzahl der zu speichernden Informationen pro Iterationsschritt. Beim ersten Versuch sammelte ich sie in einer Liste, beim zweiten definierte ich ein Array, dessen Dimension ich pro Schleifendurchgang anpasste. Die Geschwindigkeitstests zeigen, dass die Listenvariante mehr als doppelt so langsam und die Array-Variante geringfügig langsamer ist als die ursprüngliche rekursive Funktion: BlitzMax: [AUSKLAPPEN] SuperStrict |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group