2017-01-20 3 views
0

Код, приведенный ниже, работает только правильно для некоторых входов, таких как gcdIter (2, 12), который дает мне правильный выход, т. Е. 2, но если я даю ввод как gcdIter (220,120), он дает мне 110 вместо из 20. Мне нужна помощь в логике.GCD без использования рекурсии

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

    returns: a positive integer, the greatest common divisor of a & b. 
    ''' 
    if a<b: 
     while a>0: 
      if b%a==0: 
       print('the gcd is : '+''+str(a)) 
       break 
      else: 
       a -= 1 
    else: 
     while b>0: 
      if a%b==0: 
       print('the gcd is :'+''+str(b)) 
       break 
      else: 
       b -= 1 
+0

Извините, но ваш код не имеет смысла для меня. В чем смысл 'a - = 1'? –

+0

Добро пожаловать в переполнение стека! Похоже, вам нужно научиться использовать отладчик. Пожалуйста, помогите нам с некоторыми [дополнительными методами отладки] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Если у вас все еще есть проблемы после этого, пожалуйста, не забудьте вернуться с более подробной информацией. –

+0

Я просто уменьшаю значение a и проверяю его снова для получения правильного ответа. –

ответ

1

это просто как that.No нужно проверить a<b или a>b

def gcdIter(a, b): 
    while b: 
     a, b = b, a%b 
    print('the gcd is :'+str(a)) 
+0

извините !! но я не получил эту часть «a, b = b, a% b» –

+0

a, b = b, a% b - это просто короткая форма a = b & b = a% b :) – ash12

+0

да я ее получил теперь спасибо большое .. !!! –

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