Kurs:Algorithmen und Datenstrukturen/Vorlesung/Größter gemeinsamer Teiler funktional

Aus testwiki
Version vom 16. April 2020, 06:20 Uhr von imported>DannyS712 (<source> -> <syntaxhighlight> - phab:T237267)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Vorlage:Navigationsleiste/Algorithmen und Datenstrukturen

Größter gemeinsamer Teiler - funktional

In folgendem Beispiel werden wir den größten gemeinsamen Teiler mit Hilfe eines funktionalen Algorithmus berechnen.

Hintergrundwissen

Fuerx,y>0gilt:
ggT(x,y):=x
ggT(x,y):=ggT(y,x)
ggT(x,y):=ggT(x,yx)fuerxy

Wir haben folgende funktionale Spezifikationen:

ggt(x,y):={if(x0)(y0)thenggT(x,y)elseifx==ythenxelseifx>ythenggT(y,x)elseggT(x,yx)

Auswertung

Eine beispielhafte Auswertung sieht wie folgt aus:

ggT(39,15)ggT(15,39)(15,24)

ggT(15,9)(9,15)
ggT(9,6)(6,9)
ggT(6,3)(3,3)
3

Abbruchbedingungen und Rekursion

Der ggT lässt sich nur korrekt berechnen, wenn positive Eingaben gemacht werden. Bei negativen Eingaben ist der ggT undefiniert und der Algorithmus terminiert nicht.

  • Abbruchbedingungen:
x0
y0
x==y

Im Fall des Abbruchs wird eine Evaluierung oder Ausnahme angegeben.

  • Bedingungen für rekursive Verwendung der Funktion, "einfachste" Rekursion zuerst
  1. x,y>0,xy
  2. x,y>0,y<x

Im Fall der Rekursion wird eine Evaluierung angegeben.

Programm

public static int ggT(int x, int y)
{
     if  ((x <= 0) || (y <= 0))
         throw new ArithmeticError(negative Daten bei ggt));
     else   if  (x==y)  then return x;
               else   
                         if x > y  then return ggT(y,x);
                         else return ggT(x,y-x);
}

Literatur

Da die Vorlesungsinhalte auf dem Buch Algorithmen und Datenstrukturen: Eine Einführung mit Java von Gunter Saake und Kai-Uwe Sattler aufbauen, empfiehlt sich dieses Buch um das hier vorgestellte Wissen zu vertiefen. Die auf dieser Seite behandelten Inhalte sind in Kapitel 3.2.6 zu finden.


R-0 Discussion R-3