我不能让我的代码迭代x - = 1

时间:2013-06-15 01:18:03

标签: python python-2.7 recursion iteration greatest-common-divisor

我正在麻省理工学院6.00学习Python并堆叠制作递归代码。 我唯一想做的就是迭代从x扣除1,但不知道该做什么..

这是我的代码

def gcdIter(a, b):
    '''
    a, b: positive integers

    returns: a positive integer, the greatest common divisor of a & b.
    '''
    # Your code here
    x = min(a, b)
    if max(a, b) % min(a, b) == 0: 
        return x
    else:
        return #What comes to iterate -1 from x

请帮助!!!

3 个答案:

答案 0 :(得分:6)

您的代码过于复杂,请尝试从wikipedia改编的递归实现:

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

您似乎在寻找迭代解决方案(这个问题具有误导性)。如果是这种情况,这里有几个可能的实现,也改编自维基百科:

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

def gcd(a, b):
    while a != b:
        if a > b:
            a -= b
        else:
            b -= a
    return a

答案 1 :(得分:0)

一个简单的解决方案是这样的

def gcd(a, b):
    #find the gcd of a,b,None if not found
    miner = min(a, b)
    gcd = None
    for i in xrange(1, miner+1):
        if(a % i == 0 and b % i == 0):
            gcd = i
    return gcd    

现在如果> b,你可以从谷歌获得这个 gcd(a,b)= gcd(a%b,b) 你可以用一个while循环来提高函数的性能,你可以尝试一下

答案 2 :(得分:0)

你们真棒!感谢所有的答案。 结果我需要使用-1的While循环,直到min(a,b)到达gcd。

虽然您的答案看起来更简单,但问题集的答案在

之下
def gcdIter(a, b):
    '''
    a, b: positive integers

    returns: a positive integer, the greatest common divisor of a & b.
    '''
    x = min(a, b)

    # Keep looping until testValue divides both a & b evenly
    while a % x != 0 or b % x != 0:
        x -= 1

    return x

再次感谢所有人!!!