这个lcm python代码有什么错?
这是我的密码:这个lcm python代码有什么错?,python,recursion,lcm,Python,Recursion,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:
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
并且它必须是一个整数。但从我看来,它是一个整数。将return
放在对gcd
的递归调用前面。否则,如果它在其中一个分支中结束,它将返回None
在
返回后的打印
语句永远不会到达。将返回
放在对gcd的递归调用之前。否则,如果它在其中一个分支中结束,它将返回None
您的返回后的打印
语句永远不会到达。执行返回语句后,控件将退出函数调用。所以你的打印语句永远不会被执行。您应该在返回前编写打印语句。此外,用笔和纸做一次试运行将有助于执行流程 一旦执行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
链接递归调用。实际上,对于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
链接递归调用