首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不同的公式取决于它是奇数还是偶数

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

Stack Overflow用户
提问于 2018-09-17 20:30:29
回答 1查看 105关注 0票数 1

我试图在Haskell中创建一个代码,当k为偶数时执行n^k = (n * n)^(k/2),当k为奇数时执行n^k = n * (n^(k−1))。我做错了什么,但我想不出怎么解决它。

代码语言:javascript
运行
复制
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) ???
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-17 21:15:52

evenodd是Haskell中的函数,您可以直接在卫士条件中使用它们来测试一个数字是否为偶数/奇数。

下面是一个选项:

代码语言:javascript
运行
复制
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) )

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

编辑:

当然,您可以编写自己版本的偶数/奇数函数,并将其用作替代方法。

示例:

代码语言:javascript
运行
复制
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) )
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52367808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档