Iteration und Rekursion

Aus ProgrammingWiki

Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Definition

Iteration bezeichnet das wiederholte Durchlaufen von Anweisungen. Typischerweise wird dabei mitgezählt, wie oft die jeweilige Aktion erledigt wird. Wir kennen dafür die Sprachkonstrukte for..to..do, while..do, repeat..until.

Bei einer Rekursion erfolgt die Definition eines Problems, einer Funktion oder eines Verfahrens "durch sich selbst". Es handelt sich also wieder um eine Wiederholung, aber ohne Schleife! Das Ergebnis eines Verfahrens für die Eingabe $x$ wird auf das Ergebnis des gleichen Verfahrens für eine Eingabe $y$ zurückgeführt, das Ergebnis des Verfahrens für die Eingabe $y$ wird wiederum auf das Ergebnis des Verfahrens für eine Eingabe $z$ zurückgeführt, usw.
Dabei muss mindestens für einen Wert das Ergebnis des Verfahrens bekannt sein!


Typische Beispiele

Fakultät

iterativ

oder mit while:
function fakultaet(n) {
var ergebnis = 1;
while (n>1) {
             ergebnis = n * ergebnis;
             n--
            }
return ergebnis;
}


Abarbeitung für n=4:

n

Ergebnis

-

1

4

4

3

12

2

24

1

24

rekursiv


Abarbeitung für n=4:

Aufruf $fak$_$rek(4):=4*fak$_$rek(3)$;

danach "Abstieg in die Rekursionstiefe":

     $fak$_$rek(4):=4*fak$_$rek(3)$; 
         $fak$>_$rek(3):=3*fak$_$rek(2)$;
             $fak$_$rek(2):=2*fak$_$rek(1)$;
                $fak$>_$rek(1):=1*fak$_$rek(0)$;

Für n=0 liefert das Verfahren den bekannten Wert 1.
Der rekursive "Aufstieg" liefert dann:

               $fak$_$rek(1):=1*1=1$;
               $fak$_$rek(2):=2*1=2$;
               $fak$_$rek(3):=3*2=6$;
               $fak$_$rek(4):=4*6=24$;
Das Affenmodell

Eine schöne Interpretation des rekursiven Prozeduraufrufes finden wir bei WAGENKNECHT in: Rekursionen - Ein didaktischer Zugang mit Funktionen, Dümmler Verlag, Bonn 1994.

Affenmodell1.gif

"Der Auftrag, der von außen dem höchsten Oberaffen übergeben wurde, wird von diesem nicht vollständig bearbeitet, sondern in etwas abgeschwächter Form dem untergebenen Affen übergeben. Dieser verhält sich ebenso zu seinem Untergebenen. Der letzte Affe in dieser Hierarchie kann den ihm übergebenen Auftrag erfüllen und dem übergeordneten Affen übergeben. Jeder weitere Affe hat die Pflicht, das Resultat der Erledigung seines Auftrages seinem Auftraggeber zu übergeben. Schließlich kann der Ranghöchste sein Ergebnis abliefern.
Parallelen zu Einrichtungen, Ämtern und Institutionen unserer Gesellschaft sind unbeabsichtigt oder rein zufällig."

Potenz

Das Potenzieren wird bekanntermaßen iterativ z.B. so implementiert:

iterativ



rekursiv

Turtle zeichnet rekursiv - Selbstähnlichkeit

Wir betrachten das nachfolgende Grafikobjekt, das wir als Binärbaum bezeichnen wollen.
Baum mit n=10

Dabei fällt auf, dass jeder Ast wieder ein kleiner Binärbaum ist.
Wir wollen diese Selbstähnlichkeit zu seiner Beschreibung ausnutzen:


Beschreibung:

  • Der einfachste Binärbaum (Aufruf: baum(1)) besteht aus einem Stamm.
  • Jeder andere Binärbaum besteht aus einem Stamm sowie einem vereinfachten linken und einem vereinfachten rechten Binärbaum.

Wir stellen fest, dass es durchaus sinnvoll sein kann, Objekte mit sich selbst zu beschreiben.
Dazu definiert man den Baum mit sich selbst.

Prozeduren, die mit sich selbst definiert werden, heißen rekursive1)  Prozeduren.
Rekursionen stellen ein leistungsstarkes und universelles Konzept zur Problemlösung dar.
1) recurrere (lat.): "zurücklaufen"

Zusammenfassung

Rekursion bietet sich dann an, wenn man ein gestelltes Problem durch eine Funktion schrittweise in ein etwas einfacheres Problem umwandeln kann.

typischer Aufbau einer rekursiven Funktion

  • 1. $if$-Befehl, der das Ende der Selbstaufrufe bestimmt
  • 2. ein Aufruf der Funktion selbst

Nachteile der Rekursion

  • 1. Jeder Aufruf kostet Zeit - Rekursion prinzipiell langsamer als Iteration
  • 2. jeder Aufruf kostet Speicherplatz - viel Speicher im Stack (Speicherstapel)

Jede Iteration kann als Rekursion formuliert werden, jede Rekursion als Iteration (teilweise schwierig). Rekursionen werden durch den Compiler bzw. Interpreter der Programmiersprache aufgelöst - der PC-Prozessor arbeitet iterativ.

Persönliche Werkzeuge