2016-05-04 2 views
1

Я хочу, чтобы вычислить наибольший общий делитель двух положительных целых чисел в Haskell:Haskell наибольшая общая ошибка делителя?

myGCD :: Integer -> Integer -> Integer 
myGCD a b 
     | b == 0  = abs a 
     | otherwise = myGCD b (b `mod` a) 

Это должно быть довольно простой алгоритм. Тем не менее, я нахожу, что получаю очень странные результаты. Я просто не могу найти ошибку в вышеупомянутой логике. Что-нибудь очевидное выделяется, что повлияет на вычисление наибольшего общего делителя a и b?

ответ

3

Вы почти правы! Вы вызвали звонок до myGCD. Правильный код должен гласить:

 
myGCD :: Integer -> Integer -> Integer 
myGCD a b 
     | b == 0  = abs a 
     | otherwise = myGCD b (a `mod` b) 

реверсивный порядок a и b в этой последней строке даст вам некоторые фанки результаты!