不同的公式取决于它是奇数还是偶数

Tob*_*rdt 1 haskell

我正在尝试在Haskell中创建一个代码,当k是偶数时,n ^ k =(n*n)^(k/2),如果k,则n ^ k = n*(n ^(k-1))很奇怪.我做错了什么,但我无法弄清楚如何解决它.

power2 :: Integer -> Integer -> Integer 
power2 n 0 = 1
power2 n k
   | k < 0 = error "negative argument"
   | k `mod` 2 == 0 = even            -- Am I supposed to write  = even here?
   | otherwise = odd
if k even = (n 2) ( div k 2)       -- (n^2)^(k/2)  ???
if k odd = n * (n) (k-1))          -- Is this n^(k-1) ???
Run Code Online (Sandbox Code Playgroud)

st4*_*hoo 5

even并且odd是Haskell中的函数,您可以直接在保护条件中使用它们来测试数字是偶数/奇数.

以下是一个选项:

power2 :: Integer -> Integer -> Integer 
power2 n 0 = 1
power2 n k
   | k < 0  = error "negative argument"
   | even k = power2 (n * n) (div k 2)
   | odd  k = n * ( power2 n (k-1) )
Run Code Online (Sandbox Code Playgroud)

http://zvon.org/other/haskell/Outputprelude/odd_f.html http://zvon.org/other/haskell/Outputprelude/even_f.html

编辑:

当然,您可以编写自己的偶数/奇数函数版本,并将它们作为替代.

例:

myEven :: Integer -> Bool
myEven n = n `mod` 2 == 0

myOdd :: Integer -> Bool
myOdd n = n `mod` 2 == 1

power2 :: Integer -> Integer -> Integer 
power2 n 0 = 1
power2 n k
   | k < 0  = error "negative argument"
   | myEven k = power2 (n * n) (div k 2)
   | myOdd  k = n * ( power2 n (k-1) )
Run Code Online (Sandbox Code Playgroud)