为什么在Python中返回'NoneType'?

Shu*_*ham 2 python

我有一个代码,基本上解决了Project Euler中的一个问题,旨在找出前20个自然数的LCM.

def GCD(a, b):              #Euclid's algorithim
    if (b == 0):
        return a
    else:
        GCD(b, a % b)

def LCM(a, b):             #LCM(a,b) = a*b/GCD(a,b)
    x = GCD(a, b)
    return ((a * b)/x)

def RFIND(a, b):
    if (b == 20):
        return a
    else:
        RFIND(LCM(a, b), b + 1)

print RFIND(2, 1)
Run Code Online (Sandbox Code Playgroud)

但是我在运行时遇到错误.

    return ((a * b)/x)
TypeError: unsupported operand type(s) for /: 'int' and 'NoneType'
Run Code Online (Sandbox Code Playgroud)

我可以知道为什么吗?

Sve*_*ach 14

尝试

def GCD(a, b):              #Euclid's algorithim
    if (b == 0):
        return a
    else:
        return GCD(b, a % b)
Run Code Online (Sandbox Code Playgroud)

您必须返回递归调用返回的值. RFIND有一个类似的问题.

  • @Shub:发生的事情是你正在对GCD进行递归调用,但是没有返回它,会发生什么情况,当调用被解析时,由于你的else语句而返回void.在Python中,如果执行并返回任何内容,则您的方法将返回NoneType. (4认同)