Zum Inhalt springen

Iterative Programmierung

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 9. April 2021 um 15:22 Uhr durch Aka (Diskussion | Beiträge) (Leerzeichen vor Beleg entfernt). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Die iterative Programmierung (von lat. iterare = wiederholen) ist ein Konzept, bei dem als Schleifen gestaltete Wiederholungen von Anweisungen oder Anweisungsfolgen) Schritt um Schritt (gleichartig wiederholt) stattfinden.

Im Unterschied davon wird bei rekursiver Programmierung eine Schleife in der Schleife -Struktur[1] angewendet. Der Anweisungsblock (die Schleifenkontrollanweisungen) besteht lediglich aus einem sogenannten Selbstaufruf der betreffenden Funktion, die demzufolge unendlich oft eine weitere Schleife in der Schleife auslöst.

Abgrenzung

Ein anderes Programmierkonzept ist die logische Programmierung, die Lösungen für Probleme nicht über Anweisungsfolgen findet, sondern durch regelbasierte logische Folgerung.

Gegenüberstellung iterativ ↔ rekursiv

In der Literatur werden Funktionen gerne im rekursiven Programmierstil vorgestellt, die meist als einfacher zu verstehen gelten. Iterative Varianten bieten jedoch oft Vorteile:

  • Bei iterativer Programmierung kann der Speicherbedarf schärfer durch den Programmierer zugeschnitten und kontrolliert werden, wogegen bei rekursiver bei jedem Selbstaufruf unvermeidlich der Kontext der aufrufenden Prozedur (im Programm-Stapelspeicher) zu retten ist, damit er beim Rücksprung wieder hergestellt werden kann.
  • Darüber hinaus ist der Speicherbedarf für den Programm-Stapelspeicher programmiersprachlich schwer oder gar nicht kontrollierbar, wovon die berüchtigten Stapelüberläufe eine Folge sind.
  • Im rekursiven Programmierstil lassen sich manche Szenarien nur durch eine sog. Rückruffunktion (englisch callback function) realisieren. Beispielsweise wird bei einer rekursiv programmierten Traversierfunktion eines Binärbaums dieser stets in seiner Gänze durchlaufen und die Nutzfunktion in einem Rückruf 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 nächsten Element wiederholt werden.[2]

Mit wachsender Leistungsfähigkeit der Rechner tritt jedoch die Lesbarkeit und Wartbarkeit von Software gegenüber ihrer technischen Effizienz in den Vordergrund. Wo dies der Fall ist, bietet sich der rekursive Ansatz für die Arbeit mit baumartigen Datenstrukturen und der iterative für sequenzielle Datenstrukturen an.

Beispiel

Ein Beispiel für die iterative Programmierung ist ein Datenbankdurchlauf (Pascal):

procedure Durchlauf;
begin
    while not Dataset.Eof do
    begin
        Befehl1;
        Befehl2;
        Befehl3;
        Dataset.Next;
    end;
end;

Dabei werden die Befehle 1 bis 3 solange wiederholt, bis alle Datensätze durchlaufen wurden.

Anmerkungen und Einzelnachweise

  1. Douglas R. Hofstadter: Gödel, Escher, Bach, dtv, 2004, Seite 162.
  2. 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“.