es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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
Tags:  ,

Answer

  1. Avatar for 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:

    return GCD(int(b), int((a%b)))
    

    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:

    def GCD(a, b):
        if a == 0:
            print("B") # para depuración
            return int(b)
        elif b == 0:
            print("A") # para depuración
            return int(a)
        else:
            return GCD(int(b), int((a%b))) # llamada recursiva de la función
    
    print(GCD(int(input("A:")),int(input("B:"))))
    

    Con este cambio, la salida para la entrada de ejemplo A=270 y B=192 será 6 como se espera.

Comments are closed.