Quindi sto scrivendo un programma in Python per ottenere il GCD di qualsiasi quantità di numeri.Algoritmo euclideo (GCD) con più numeri?
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)
La funzione accetta un elenco di numeri. Questo dovrebbe stampare 2. Tuttavia, non capisco come utilizzare l'algoritmo in modo ricorsivo in modo che possa gestire più numeri. Qualcuno può spiegare?
aggiornato, ancora non funziona:
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, risolto
def GCD(a, b):
if b == 0:
return a
else:
return GCD(b, a % b)
e quindi utilizzare ridurre, come
reduce(GCD, (30, 40, 36))
il tuo primo problema che ho notato è che dovrai ordinare l'elenco in modo che l'elemento più piccolo sia l'ultimo –
Non sicuro se duplicato o solo correlato: [calcolo del massimo comune denominatore in python] (http: // stackoverflow. com/q/3640955/241039) –
solo fyi se puoi farlo con iterativo invece di ricorrere sarebbe probabilmente più veloce e in grado di gestire valori più grandi ... la ricorsione della profondità indefinita può essere un po 'approssimativa in python –