Also schreibe ich ein Programm in Python, um die GCD von einer beliebigen Anzahl von Zahlen zu bekommen.Euklidischer Algorithmus (GCD) mit mehreren Zahlen?
def GCD(numbers):
if numbers[-1] == 0:
return numbers[0]
# i'm stuck here, this is wrong
for i in range(len(numbers)-1):
print GCD([numbers[i+1], numbers[i] % numbers[i+1]])
print GCD(30, 40, 36)
Die Funktion übernimmt eine Liste mit Zahlen. Dies sollte drucken 2. Allerdings verstehe ich nicht, wie Sie den Algorithmus rekursiv verwenden, so dass es mehrere Zahlen verarbeiten kann. Kann jemand das erklären?
aktualisiert, immer noch nicht funktioniert:
def GCD(numbers):
if numbers[-1] == 0:
return numbers[0]
gcd = 0
for i in range(len(numbers)):
gcd = GCD([numbers[i+1], numbers[i] % numbers[i+1]])
gcdtemp = GCD([gcd, numbers[i+2]])
gcd = gcdtemp
return gcd
Ok, löste es
def GCD(a, b):
if b == 0:
return a
else:
return GCD(b, a % b)
und dann reduzieren verwenden, wie
reduce(GCD, (30, 40, 36))
Ihr erstes Problem, das ich bemerke, ist, dass Sie die Liste so sortieren müssen, dass das kleinste Element das letzte ist –
Nicht sicher, ob duplicate oder nur verwandt: [Computing größten gemeinsamen Nenner in Python] (http: // stackoverflow. com/q/3640955/241039) –
nur fyi, wenn Sie es mit iterative statt recurse tun können, wäre es wahrscheinlich schneller und in der Lage, größere Werte zu behandeln ... Rekursion von undefinierter Tiefe kann ein wenig skizzenhaften in Python –