计算GCD时无法返回if块

时间:2018-11-15 17:15:42

标签: python greatest-common-divisor

我正在尝试计算2个数字的GCD,下面的代码块运行正常,我正在使用递归,但是当我尝试返回一个值时,我无法这样做,return a会导致None

def gcd(a,b):
    if b == 0:
        print a
        return a   # This is not working 
    else:
        gcd(b,a%b)

XX = gcd(3, 5)
print (XX)

输出:

1
None

2 个答案:

答案 0 :(得分:0)

您的代码

def gcd(a,b):
    if b == 0:
        print a
        return a   # This is not working 
    else:
        gcd(b,a%b)

XX=gcd(3,5)
print (XX)

将不起作用,因为您缺少gcd(b,a%b)行中的return语句。所以应该是

def gcd(a,b):
    if b == 0:
        print a
        return a
    else:
        return gcd(b,a%b)

print(gcd(12, 4))

顺便说一句-如果可能的话,不要自己编写代码,请使用预定义的库:

from fractions import gcd
print(gcd(4, 12))

答案 1 :(得分:0)

您的递归将不起作用...您缺少return语句,并且该算法也不起作用...

这是递归gcd的样子:

def gcd(a,b):
    r = a % b
    if r == 0:
        return a
    elif r == 1:
        return 1
    return gcd(b, r)

,这里是非递归gcd:

def gcd(a, b):
   while b:
       a, b = b, a % b
   return a

还请注意,您可以只使用math.gcd