| Es gibt viele Probleme die sich mittels einer rekursiven Lösung leichter realisieren lassen, als mit einer iterativen
Lösung. Das folgende Beispiel soll einen Denkansatz in diese Richtung darstellen. Gehen wir davon aus, daß wir
eine Datenstruktur besitzen, welche ein Labyrinth beschreibt. Es soll nun ein Programm geschrieben werden, das
durch dieses Labyrinth einen Weg findet. Um einen Weg nicht zwei mal zu gehen, markiert das Programm jeden
Entscheidungspunkt mit einem Token - es zeigt an das dieser Punkt vom dem Programm schon besucht wurde.
Der Algorithmus sucht irgendeinen Weg durch das Labyrinth - also nicht unbedingt den Schnellsten.
C-Beispiel für Rekursion: Navigation im Labyrinth (in C)
BOOLEAN FindPathThroughMaze
(
MAZE_T maze,
POINT position
)
{
POINT newPosition;
BOOLEAN success;
/* Wenn diese Position bereits besucht wurde, kein weiterer Aufruf */
if ( AlreadyTried( maze, position )
return( FALSE );
/* Haben wir den Ausgang gefunden */
if ( ThisIsTheExit( maze, position )
return( TRUE );
/* Aktuelle Position merken */
RememberPosition( maze, position );
/* Alle Richtungen versuchen */
if ( MoveLeft (maze, position, &newPosition )
if ( FindPathThroughMaze( maze, newPosition )
return( TRUE );
if ( MoveUp (maze, position, &newPosition )
if ( FindPathThroughMaze( maze, newPosition )
return( TRUE );
if ( MoveDown (maze, position, &newPosition )
if ( FindPathThroughMaze( maze, newPosition )
return( TRUE );
if ( MoveRight (maze, position, &newPosition )
if ( FindPathThroughMaze( maze, newPosition )
return( TRUE );
return( FALSE );
}
|