Что я делаю не так с этим кодом 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 элемент управления выходит из вызова функции. Таким образом, ваши операторы печати никогда не выполняются. Вы должны написать распечатку до возвращения. Также выполнение пробного пера с ручкой и бумагой помогло бы потоку выполнения.