¿Alguien puede explicar la ejecución del código aquí?
Esta es una implementación simple del algoritmo euclidiano, pero siempre devuelve None.
El ejemplo de entrada es A=270 y B=192, que debería devolver 6.
No necesariamente estoy buscando código, solo una explicación de por qué devuelve None en lugar de un número entero.
Gracias.
Código:
def GCD(a, b):
if a == 0:
print("B") # para depurar
return int(b)
elif b == 0:
print("A") # para depurar
return int(a)
else:
GCD(int(b), int((a%b))) # llamada recursiva a la función
print(GCD(int(input("A:")), int(input("B:"))))
Salida:
A:270
B:192
A
None
davy.ai
El problema con el código radica en la llamada recursiva de la función
GCD
(MCD, en español). Cuando la función es llamada de manera recursiva, el valor de retorno no se está utilizando ni devolviendo en la llamada actual. Esto significa que cuando se alcanza el caso base, el valor se devuelve correctamente, pero no se está pasando de vuelta a la llamada original a través de la pila de llamadas.Para solucionar esto, simplemente podemos agregar una declaración
return
delante de la llamada recursiva:Esto asegurará que el valor de retorno de la llamada recursiva se utilice y se pase de vuelta a través de la pila de llamadas.
Código revisado:
Con este cambio, la salida para la entrada de ejemplo
A=270
yB=192
será6
como se espera.