1

这是我的代码:

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)是 aNoneType并且它必须是整数。但据我所知,它是一个整数。

4

3 回答 3

2

放在return递归调用前面gcd。否则,None如果它最终在这些分支之一中返回。

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

于 2013-12-15T05:14:36.973 回答
2

gcd实际上,代码对于and可以简单得多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来链接递归调用。

于 2013-12-15T06:35:54.383 回答
0

一旦执行了 return 语句,控制就退出函数调用。所以你的打印语句永远不会被执行。您应该在 return 之前编写 print 语句。用笔和纸进行试运行也有助于执行流程。

于 2013-12-15T06:01:32.803 回答