www.wikidata.de-de.nina.az
Die iterative Programmierung von lat iterare wiederholen ist ein Konzept bei dem mehrfach auszufuhrende Arbeitsschritte in Schleifen Wiederholungen von Anweisungen oder Anweisungsfolgen umgesetzt werden Inhaltsverzeichnis 1 Abgrenzung 1 1 Gegenuberstellung 2 Beispiel 3 Anmerkungen und EinzelnachweiseAbgrenzung BearbeitenAndere Programmierkonzepte sind die rekursive Programmierung die fur mehrfach auszufuhrende Arbeitsschritte Rekursion verwendet wiederholte Selbstaufrufe eines Programmteils prinzipiell lassen sich rekursive Algorithmen auch iterativ implementieren und umgekehrt die logische Programmierung die Losungen fur Probleme nicht uber Anweisungsfolgen findet sondern durch regelbasierte logische Folgerung Gegenuberstellung Bearbeiten In der Literatur werden Funktionen gerne im rekursiven Programmierstil vorgestellt die meist als einfacher zu verstehen gelten Bei rekursiver Programmierung wird die Wiederholung erreicht ohne dass das Programm explizite Schleifen enthalt 1 Anstatt Schleifenkontrollanweisungen enthalt das Programm sogenannte direkte Selbstaufrufe der betreffenden Funktion oder auch indirekte gegenseitige Aufrufe mehrerer Funktionen untereinander In beiden Fallen iterativer wie rekursiver Programmierung bedarf es normalerweise einer expliziten Abbruchbedingung die eine Terminierung des Programms erzwingt wobei Fehler in derselben zu unbeabsichtigten Endlosschleifen fuhren konnen Iterative Implementierungen bieten oft Vorteile Bei iterativer Programmierung kann der Speicherbedarf scharfer durch den Programmierer zugeschnitten und kontrolliert werden wogegen bei rekursiver normalerweise bei jedem Selbstaufruf der Kontext der aufrufenden Prozedur im Programm Stapelspeicher zu retten ist damit er beim Rucksprung wieder hergestellt werden kann 2 Daruber hinaus ist der Speicherbedarf fur den Programm Stapelspeicher programmiersprachlich schwer oder gar nicht kontrollierbar Auch die Anzahl der Wiederholungen resp Selbstaufrufe ist bei rekursiver Programmierung manchmal weniger deutlich erkennbar Beide Probleme mogen zu den beruchtigten Stapeluberlaufen beitragen Im rekursiven Programmierstil lassen sich manche Szenarien nur durch eine sogenannte Ruckruffunktion englisch callback function realisieren Beispielsweise wird bei einer rekursiv programmierten Traversierfunktion eines Binarbaums dieser stets in seiner Ganze durchlaufen und die Nutzfunktion in einem Ruckruf implementiert Im Gegensatz dazu kann bei iterativer Programmierung das zu bearbeitende Segment des Baums durch eine Suchfunktion angesteuert die Nutzfunktion nach Belieben als flache Anweisungsfolge bzw als Unterprogramm implementiert und nach einem iterativen Querschritt beim nachsten Element wiederholt werden 3 Mit wachsender Leistungsfahigkeit der Rechner tritt jedoch die Lesbarkeit und Wartbarkeit von Software gegenuber ihrer technischen Effizienz in den Vordergrund Wo dies der Fall ist bietet sich der rekursive Ansatz fur die Arbeit mit baumartigen Datenstrukturen und der iterative fur sequenzielle Datenstrukturen an Beispiel BearbeitenEin Beispiel fur die iterative Programmierung ist ein Datenbankdurchlauf Pascal durch die Datensatze Zeilen von der Tabelle Dataset procedure Durchlauf begin while not Dataset Eof do wiederhole solange Tabelle Dataset nicht zu Ende ist begin den hier beginnenden Befehlsblock Befehl1 Befehl2 Befehl3 Dataset Next Schalte weiter zum n a chsten Datensatz n a chste Zeile von Dataset end end Dabei werden die Befehle 1 bis 3 solange wiederholt bis alle Datensatze durchlaufen wurden Anmerkungen und Einzelnachweise Bearbeiten Niklaus Wirth Algorithmen und Datenstrukturen B G Teubner 1983 Seite 150 Ausnahmen sind Programmiersysteme und Compiler die Unterstutzung dafur bieten Endrekursionen zu erkennen und zu optimieren Siehe dazu Traversierung mit Codebeispielen und Ben Pfaff An Introduction to Binary Search Trees and Balanced Trees Free Software Foundation Inc Boston 2004 S 47 4 9 2 Traversal by Iteration Abgerufen von https de wikipedia org w index php title Iterative Programmierung amp oldid 236555562