Galileo Computing < openbook >
Galileo Computing - Bücher zur Programmierung und Softwareentwicklung
Galileo Computing - Bücher zur Programmierung und Softwareentwicklung

...powered by haas.homelinux.net...

Einstieg in VB.NET von René Martin
- Für Programmiereinsteiger -
Einstieg in VB.NET
gp Kapitel 2 Aufbauwissen VB.NET
  gp 2.1 Ein zweiter Dialog
  gp 2.2 Ein Süßigkeitenautomat
  gp 2.3 Eine Listbox
  gp 2.4 With ... End With
  gp 2.5 Die Liste
  gp 2.6 Eine ComboBox
  gp 2.7 Die Select-Case-Verzweigung
  gp 2.8 Ein theoretischer Exkurs: Ereignisse
    gp 2.8.1 Dynamisch ein- und ausblenden
    gp 2.8.2 Dynamische Größenänderung
  gp 2.9 Zwei völlig überflüssige Beispiele
  gp 2.10 Schleifen
  gp 2.11 For ... Next
  gp 2.12 Do ... Loop
  gp 2.13 Eine Schleife über den Süßigkeiten
  gp 2.14 Ein theoretischer Exkurs: Sammlungen oder Collections
  gp 2.15 Die For ... Each-Schleife
  gp 2.16 Schleifen spielerisch
    gp 2.16.1 Primzahlen
    gp 2.16.2 Fibonacci-Zahlen
    gp 2.16.3 ggT und kgV
    gp 2.16.4 Ein Scherz zum Schluss
  gp 2.17 Rekursives Programmieren
  gp 2.18 Arrays (Datenfelder)
    gp 2.18.1 Eindimensionale Arrays
    gp 2.18.2 Mehrdimensionale Arrays
  gp 2.19 Konstanten
  gp 2.20 Funktionen
  gp 2.21 Zusammenfassung


Galileo Computing

2.17 Rekursives Programmieren  toptop

Funktionen und Prozeduren können sich selbst aufrufen. Diese Selbstaufrufe werden rekursives Programmieren genannt. Normalerweise wird in einer Bedingung etwas geprüft. Ist die Bedingung noch nicht ganz erfüllt, dann ruft die Funktion sich selbst auf. Erst wenn alle »Unterelemente« abgearbeitet sind, wird die Funktion oder Prozedur verlassen.

Ein Beispiel dafür ist die Quersumme und die Endquersumme. Die Quersumme berechnet sich als Summe der einzelnen Ziffern einer Zahl. Beispielsweise ist die Quersumme von 5 = 5, die Quersumme von 12 ist 3 und die Quersumme von 1.492 ist 16. Die Eigenschaft Lenghth zählt die Zeichen und übergibt nun in einer For...Next-Schleife jede einzelne Ziffer (Substring(dblZähler, 1)), die aus der Zahl herausgelöst wird, an die Variable dblInkrement. Diese werden eingesammelt (dblÜbergabewert) und zum Schluss wieder zurückgegeben.

Function Quersumme(Zahl As Double) As Long
   Dim dblÜbergabewert As Double = 0
   Dim dblInkrement As Double = 0
   Dim dblZähler As Long

   For dblZähler = 0 To Zahl.ToString.Length - 1
      dblInkrement = _
      CType(Zahl.ToString.Substring(dblZähler, 1), _
      Double)
      dblÜbergabewert = dblÜbergabewert + dblInkrement
   Next
   Return dblÜbergabewert
End Function
Abbildung

Abbildung 2.48   Die Quersumme von 1234567890

Das folgende Beispiel funktioniert rekursiv: die Endquersumme. Um eine Funktion zu programmieren, welche die Endquersumme berechnet, könnte eine zweite Funktion die erste benutzerdefinierte Funktion Quersumme so lange aufrufen, bis das Ergebnis der benutzerdefinierten Funktion EndQuersumme kleiner als 10 ist. Oder die Funktion EndQuersumme ruft sich selbst so lange auf, bis das Ergebnis < 10 ist:

Function EndQuersumme(Zahl) As Long
   Dim dblÜbergabewert As Double
   Dim dblInkrement As Double
   Dim dblZähler As Long
   dblÜbergabewert = 0
   dblInkrement = 0

   For dblZähler = 0 To Zahl.ToString.Length -1
      dblInkrement = _
      CType(Zahl.ToString.Substring(dblZähler, 1), _
      Double)
      dblÜbergabewert = dblÜbergabewert + dblInkrement
   Next
   If dblÜbergabewert > 9 Then
      dblÜbergabewert = EndQuersumme(dblÜbergabewert)
   End If
   Return dblÜbergabewert
End Function
Abbildung

Abbildung 2.49   Quersumme und Endquersumme

Die Funktion ruft sich so lange selbst auf, bis alle »Werte aufgebraucht sind«, das heißt, bis die endgültige Summe einen Wert erreicht hat, der kleiner als 10 ist. Beliebte Beispiele für rekursive Funktionen sind Fakultäten (multipliziere alle Zahlen von 1 bis n miteinander) oder die Fibonacci-Reihe.

Vielleicht fragt sich der Leser nun, wer denn so etwas braucht. Die Antwort ist einfach: Manchmal müssen Ordner und Unterordner nach etwas durchsucht werden, ohne dass die Tiefe der Ordnerstruktur bekannt ist. Dafür benötigt man solche Programme. Ein anderes Anwendungsbeispiel ist die Möglichkeit, in Grafikprogrammen Gruppen von Objekten zu bilden. Diese können wiederum mit anderen Objekten gruppiert werden und so weiter. Will man nun per Programmierung auf alle Elemente zugreifen, dann muss man die Objekte der äußeren Gruppe daraufhin überprüfen, ob es sich um Gruppen handelt. Falls ja, muss man bei allen Elementen überprüfen, ob es sich um eine Gruppe handelt und so weiter.

Vielleicht sind rekursive Programme in der Praxis selten, aber sie tauchen auf. Und deshalb hat unser Endquersummen-Programm seine Berechtigung.

Bisher sind schon einige Begriffe gefallen, die noch erläutert werden sollen. Auf geht´s.

  

VB.NET

Einstieg in ASP.NET

Einstieg in C#

Visual C#

VB.NET und Datenbanken

Einstieg in XML