Entwickler-Ecke

C# - Die Sprache - Modulo


FrickelEgon - Do 16.03.17 14:52
Titel: Modulo
Ich habe da ein Verständnis Problem, muss auch gleich dazu sagen das ich mit C# nicht arbeite.

Es geht um dieses Stück C# Code...

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
        private uint GCD(uint a, uint b)
        {
            if (a == 0)
                return b;
            if (b == 0)
                return a;

            if (a > b)
                return GCD(a % b, b);
            else
                return GCD(a, b % a);
        
        }

Was ich nicht verstehe ist das Modulo was dort in klammern steht (a % b, b) bzw. (a, b % a).

Danke schon mal.

Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt
Moderiert von user profile iconChristian S.: Topic aus Alle Sprachen - Alle Plattformen verschoben am Do 16.03.2017 um 13:58


Ralf Jansen - Do 16.03.17 14:57

Es ist ein rekursiver Methodenaufruf. Das Ergebnis der Modulo Operation ist dann einfach der Wert einer der beiden Parameter deines rekursiven Aufrufs der GCD Methode.


FrickelEgon - Do 16.03.17 15:26

Sorry, ich habe die frage nicht richtig gestellt. Mir ist das Ergebnis nicht klar, wie kommt das zustande? Wird wahrscheinlich was total simples sein, ich weiß nur nicht was.

Als Beispiel, a=6500, b=5000 Ergebnis vom Code ist 500. Also mir fehlt schlicht die Grundlage wie das Ergebnis zustande kommt. 6500 Modulo 5000 ergibt auf meinem Taschenrechner 1500, wieso kommt beim Code also 500 raus?


Ralf Jansen - Do 16.03.17 15:32

Dein Code sucht den größten gemeinsamen Teiler der beiden übergebenen Werte (GCD steht hier für Greatest Common Divisor). Und der größte gemeinsame Teiler von 6500 und 5000 ist 500.
Dein Code ist eine Implementierung des euklidischen Algorithmus [https://de.wikipedia.org/wiki/Euklidischer_Algorithmus] in rekursiv.


FrickelEgon - Do 16.03.17 15:38

Jetzt verstehe ich, tausend Dank!

Ich war vorher komplet auf dem Holzweg.

Danke, und glückwunch zum 4000ten Beitag. :)