这是我的代码:
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
,它必须是整数。但从我看来它是一个整数。
答案 0 :(得分:2)
将return
放在对gcd
的递归调用之前。否则,如果它在其中一个分支中结束,则返回None
。
print
之后的return
语句永远不会到达。
答案 1 :(得分:2)
实际上,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
来链接递归调用。
答案 2 :(得分:0)
执行return语句后,控件退出函数调用。所以你的print语句永远不会执行。你应该在返回之前写一下print语句。用笔和纸做干运行也有助于执行流程。