Feedback

VB - Größter gemeinsamer Teiler

Veröffentlicht von am 23.03.2010
(2 Bewertungen)
Diese Funktion berechnet iterativ den größten gemeinsamen Teiler(ggT) zweier ganzen Zahlen a & b.

Verglichen mit einer rekursiven Methode, ist der iterative Weg um einiges schneller.
GFU-Schulungen  [Anzeige]

ASP.NET 2.0 und 3.5

Dieser Kurs vermittelt Ihnen alle Erweiterungen von Microsoft ASP.NET 2.0. Zu diesen zählen u. a. Data Bindung, Master Pages, und Security.

Angular mit ASP.NET Core für .NET-Entwickler

.NET ist Ihnen vertraut, als Entwickler verfügen Sie über einschlägige Kenntnisse. In diesem Kurs lernen Sie nun, Angular in .NET-Umgebungen einzusetzen. Sie verstehen das Konzept von Angular und integrieren das clientseitige JS-Framework sicher in.NET-Anwendungen.

Function ggT(ByVal a As Integer, ByVal b As Integer) As Integer
    While b > 0
        ggT = a Mod b
        a = b
        b = ggT
    End While

    Return a
End Function

7 Kommentare zum Snippet

regalis schrieb am 24.03.2010:
Also irgendwie übersteigt der Ausdruck "a = b" mein Verständnis :D
regalis schrieb am 24.03.2010:
Ich hab diese C#-Methode gefunden....sieht sinnvoller aus:
public static long GetGCD(long Number1, long Number2)
{
long remainder = 0;
do
{
remainder = Number1 % Number2;
Number1 = Number2;
Number2 = remainder;
} while (remainder != 0);
return Number1;
}
Klemens Nanni schrieb am 24.03.2010:
Ein kleiner, aber wesentlicher Fehler in der While-Schleife wurde ausgemerzt.

regalis, deine Funktion greift auf eine weitere, nicht zwingend notwendige Variable zurück. Sie ist weder sinnvoller noch schneller, eher im Gegenteil.
regalis schrieb am 24.03.2010:
Ich verstehe deine Logik nicht...sobald du "a=b" machst ist der Wert in a futsch...
Oder übersehe ich da eine raffinierte Mechanik in deinem Algorithmus!?
Klemens Nanni schrieb am 24.03.2010:
Falls du glaubst, die Funktion überschreibt a bevor sie sie verwendet, hast du nur zur Hälfte Recht.
Zwar wird a = b gesetzt, jedoch rechnet der Computer intern mit Kopien der Variablen, der eigentliche Wert verändert sich nicht.
regalis schrieb am 25.03.2010:
Ich habe jetzt extra ein VB-Project erstellt um deine Aussage zu testen(weil ich noch nie mit VB gecoded habe und nicht sicher war ob du nicht doch recht hast).
Und stell dir vor was ich entdeckt hab....
a wird von b überschrieben und a mod b ergibt sofort 0
Somit ist der Rückgabewert IMMER b!
Klemens Nanni schrieb am 25.03.2010:
Oh,
meine schlecht gewählten Testzahlen haben diese Lücke gut versteckt. Ich danke dir, der Code wurde soeben ergänzt.
 

Logge dich ein, um hier zu kommentieren!