这个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
链接递归调用