Haskell学习(2)——Haskell实现Fibonacci函数和阶乘函数

7356阅读 1评论2011-12-31 GFree_Wind
分类:LINUX

作者:gfree.wind@gmail.com
博客:blog.focus-linux.net   linuxfocus.blog.chinaunix.net
 
 
本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途。
======================================================================================================

今天来使用Haskell完成两个玩具程序吧,一个是Fibonacci函数,一个是阶乘函数。当我们学习递归函数的时候,这两个函数是不可避免的。尽管这两个函数的非递归实现很简单。

先看看Fibonacci函数吧:
  1. Prelude> let fibonacci n = if n < 3 then 1 else fibonacci (n-2) + fibonacci(n-1)
  2. Prelude>
检验一下输出结果:
  1. Prelude>
  2. Prelude> fibonacci 1
  3. 1
  4. Prelude> fibonacci 2
  5. 1
  6. Prelude> fibonacci 3
  7. 2
  8. Prelude> fibonacci 4
  9. 3
  10. Prelude> fibonacci 5
  11. 5
  12. Prelude> fibonacci 6
  13. 8
这里有个小缺陷,当输入0或者负数的时候,返回值仍然为1。个人认为对于当输入为0或者负数的时候,如果可以抛出一个异常来报错为好。但是目前我还不知道如何实现haskell的异常实现。


下面是阶乘的实现
  1. Prelude> let factorial n = if n < 2 then 1 else n * factorial (n-1)
  2. Prelude> factorial 0
  3. 1
  4. Prelude> factorial 1
  5. 1
  6. Prelude> factorial 2
  7. 2
  8. Prelude> factorial 3
  9. 6
  10. Prelude> factorial 4
  11. 24
  12. Prelude> factorial 5
  13. 120
同样有个小缺陷。当输入负数的时候,返回值为1。我的观点仍然和上面一样,最好以抛出一个异常为佳。毕竟负数的阶乘就是一个异常嘛。


代码很简单,就是一个玩具程序。希望可以很快写成真正有用的Haskell代码。

上一篇:Haskell学习(1)——我的第一个Haskell程序
下一篇:GDB调试技巧:调试复杂的宏定义

文章评论