2015-10-07 3 views
-1

следующий код:Функция Haskell «ехр» возвращает неверный результат

Module Main where 

main :: IO() 
main = do putStrLn "hello" 
      putStrLn $ "2 exp 6 = " ++ show (2 `exp1` 6) 

exp1 :: Integer -> Integer -> Integer 
exp1 x n | n == 0 = 1 
     | n == 1 = x 
     | even n =  exp1 (x*x) m 
     | odd n = x * exp1 (x*x) (m-1) 
     where m = n `div` 2 

производит выход 4 для 2 `exp1` 6, который, очевидно, не так.

спасибо

ответ

6

Нечетный случай неправильный. В итоге вы оцениваете exp1 4 3 как 4 * (exp1 16 0).

+0

Хорошо, я не тестировал, но заменил m-1 на m, должен работать. благодаря – lolveley