3

Я изучаю Python в MIT 6,00 и сложный код рекурсии. Единственное, что я хочу сделать, это просто итерация вычесть 1 из х, но не знаю, что делать ..Я не могу сделать свой код итерацией 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 

Пожалуйста, помогите !!!

+1

Если мы делаем x-1 из другого, как это должно повлиять на параметры a и b? Вы можете переоценить свой алгоритм. Для рекурсии else снова вызовет функцию. –

+0

Замечание: вам не нужно брать пять строк комментариев после 'def gcdIter()' part; достаточно одной строки над определением кода. – TakeS

ответ

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 
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  

теперь, если а> Ь, вы можете получить это от google gcd (a, b) = gcd (a% b, b) вы можете сделать цикл while, чтобы улучшить производительность функции, вы можете попробовать

0

Вы, ребята, потрясающие !!!! Спасибо за ответы на все вопросы. Оказалось, что мне нужно использовать цикл While минус 1, пока мин (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 

Опять же, спасибо за все !!!

+0

В вашем вопросе вы заявили, что вы были «сложены, делая код рекурсии». Это не рекурсивный код, это итеративно! –

Смежные вопросы