Что я делаю не так с этим кодом Python lcm?

Вот мой код:

def gcd(a,b):
    if a%b == 0:
        return b
        print b

    elif b%a == 0:
        return a
        print a
    else:
        if a > b:
            gcd(a%b,b)
        elif b > a:
            gcd(b%a,a)
        else:
            return a
            print a
def lcm(a,b):
    if a==b:
        return a
    else:
        y = gcd(a,b)
        return (a*b)/y
        print (a*b)/y

Что я делаю неправильно? Я получаю ошибку, потому что, по-видимому, y = gcd(a,b) это NoneType и это должно быть целое число. Но из того, что я вижу, это целое число.

3 ответа

Решение

Положил return перед вашими рекурсивными вызовами gcd, В противном случае возвращается None если он окажется в одной из этих веток.

print заявления после вашего returnс никогда не достигаются.

На самом деле, код может быть намного проще для gcd а также lcm, поскольку некоторые из ваших базовых случаев перекрываются.

def gcd(a, b):
    if b == 0:
        return a
    else:
        return gcd(b, a % b)

def lcm(a, b):
    return a * b / gcd(a, b)

Не забывайте: для рекурсивных функций вы должны использовать return связать рекурсивные вызовы.

После выполнения оператора return элемент управления выходит из вызова функции. Таким образом, ваши операторы печати никогда не выполняются. Вы должны написать распечатку до возвращения. Также выполнение пробного пера с ручкой и бумагой помогло бы потоку выполнения.

Другие вопросы по тегам