2013-12-15 45 views
1

这里是我的代码:我在做这个lcm python代码错了什么?

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,它必须是一个整数。但从我看到它是一个整数。

回答

2

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

您的return之后的print声明永远不会到达。

0

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

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来链接递归调用。