In der Mathematik ist der größte gemeinsame Teiler (gcd) von zwei oder mehr ganzen Zahlen, wenn mindestens einer von ihnen nicht Null ist, die größte positive ganze Zahl, die die Zahlen ohne einen Rest teilt. Zum Beispiel kann die GCD von 8 und 12 ist 4. WikipediaWie bestimmt diese Methode den größten gemeinsamen Teiler?
Die folgende Methode in der Lage ist, die GCD zu bestimmen:
def gcd(a, b)
if a % b == 0
b
else
gcd(b, a % b)
end
end
p gcd(4, 12)
#=> 4
Wie funktioniert diese Methode?
Es macht Sinn, wenn a % b == 0
dann b
die größte Zahl ist, die in a
und b
gehen kann.
Aber warum die gleiche Methode noch einmal aufrufen, aber die Args umschalten und den Modulus wieder nehmen?
Ich bin nicht die Argumentation hinter dem else
Teil grokken.
Edit:
einige puts
Aussagen Zusätzlich zu machen es klarer:
def gcd(a, b)
puts "Inside gcd, a: #{a}, b: #{b}, a \% b: #{a % b}"
if a % b == 0
puts "Inside if, a: #{a}, b: #{b}, a \% b: #{a % b}"
b
else
puts "Inside else, a: #{a}, b: #{b}, a \% b: #{a % b}"
gcd(b, a % b)
end
end
p gcd(55, 105)
stdout:
Inside gcd, a: 55, b: 105, a % b: 55
Inside else, a: 55, b: 105, a % b: 55
Inside gcd, a: 105, b: 55, a % b: 50
Inside else, a: 105, b: 55, a % b: 50
Inside gcd, a: 55, b: 50, a % b: 5
Inside else, a: 55, b: 50, a % b: 5
Inside gcd, a: 50, b: 5, a % b: 0
Inside if, a: 50, b: 5, a % b: 0
5
Vielleicht fügen Sie einfach einige 'puts' Anweisungen hinzu, um zu sehen, was es tut? Fun Tatsache, Ruby hat '12.gcd (4)' Funktion eingebaut. – akuhn
Ich denke, die Methode wäre klarer, wenn Sie es gerade ausprobiert haben, sagen wir auf 55 und 105. –