这个lcm python代码我做错了什么?

时间:2013-12-15 05:13:45

标签: 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:
            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 个答案:

答案 0 :(得分:2)

return放在对gcd的递归调用之前。否则,如果它在其中一个分支中结束,则返回None

print之后的return语句永远不会到达。

答案 1 :(得分:2)

实际上,gcdlcm的代码可以更加简单,因为您的某些基本案例会重叠。

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语句。用笔和纸做干运行也有助于执行流程。