2015-12-10 4 views
0

У меня есть два фрагмента кода на основе python, где вы найдете GCD с положительными целыми числами.python find GCD рекурсивно встречается с ошибкой

Вот правильный:

def gcdRecur(a, b): 

    if b == 0: 
     return a 
    return gcdRecur(b, a%b) 

Вот один с ошибкой:

def gcdRecur(a, b): 

    a = max(a, b) 
    b = min(a, b) 
    if b == 0: 
     return a 
    return gcdRecur(b, a%b) 

Это легко увидеть различия между этими двумя частями кода. И я знаю, что нет необходимости добавлять

a = max(a, b) 
b = min(a, b) 

до контроля потока. Я не могу найти логических ошибок в последнем коде, но он печатает неверный результат.

------use former code find GCD of 182 ans 224------ 
print out 14 
------use former code find GCD of 182 ans 224------ 
print out 224(wrong answer) 

Поэтому я предполагаю, что это может быть связано с принципом рекурсии в питоне, который я вообще не знаю. Может ли кто-нибудь помочь мне и рассказать мне, что происходит на T T.

Спасибо.

+0

«Я не могу найти какие-либо логические ошибки в последнем коде «Тогда вы знаете, что ошибка не в последнем коде. Что происходит, когда вы вызываете gcdRecur (5, 10)? 'a' становится 10, затем в следующей строке вы выполняете' b = max (a, b) ', который по существу является' b = max (10, 10) '. Таким образом, если 'b> a' после двух ваших строк, 'a' и' b' будет __always__ быть одинаковым значением. –

+0

@VincentSavard Бог, я этого не замечал! Большое спасибо. –

+0

'a, b = отсортировано ((a, b), reverse = True)' –

ответ

0

Проблема заключается в том, когда вы звоните a = max(a,b) и Ь значение макс, старый a будет отсутствовать, и a будет равен b, что приводит к gcd(b,b) == b

+0

Большое вам спасибо. –

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