Chinaunix首页 | 论坛 | 博客
  • 博客访问: 8029648
  • 博文数量: 159
  • 博客积分: 10424
  • 博客等级: 少将
  • 技术积分: 14615
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-14 12:45
个人简介

啦啦啦~~~

文章分类
文章存档

2015年(5)

2014年(1)

2013年(5)

2012年(10)

2011年(116)

2010年(22)

分类: LINUX

2011-12-31 23:16:35

作者: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代码。

阅读(7025) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

GFree_Wind2012-01-11 15:50:26

erazy0: Fibonacci递归效率比较低,可以再用迭代试一下.....
Fibonacci用非递归可以很容易实现。这里不过是个玩具,我主要是想体验一下haskell