作者:gfree.wind@gmail.com
博客:blog.focus-linux.net linuxfocus.blog.chinaunix.net
本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途。
======================================================================================================
今天来使用Haskell完成两个玩具程序吧,一个是Fibonacci函数,一个是阶乘函数。当我们学习递归函数的时候,这两个函数是不可避免的。尽管这两个函数的非递归实现很简单。
先看看Fibonacci函数吧:
- Prelude> let fibonacci n = if n < 3 then 1 else fibonacci (n-2) + fibonacci(n-1)
-
Prelude>
检验一下输出结果:
- Prelude>
-
Prelude> fibonacci 1
-
1
-
Prelude> fibonacci 2
-
1
-
Prelude> fibonacci 3
-
2
-
Prelude> fibonacci 4
-
3
-
Prelude> fibonacci 5
-
5
-
Prelude> fibonacci 6
-
8
这里有个小缺陷,当输入0或者负数的时候,返回值仍然为1。个人认为对于当输入为0或者负数的时候,如果可以抛出一个异常来报错为好。但是目前我还不知道如何实现haskell的异常实现。
下面是阶乘的实现
- Prelude> let factorial n = if n < 2 then 1 else n * factorial (n-1)
-
Prelude> factorial 0
-
1
-
Prelude> factorial 1
-
1
-
Prelude> factorial 2
-
2
-
Prelude> factorial 3
-
6
-
Prelude> factorial 4
-
24
-
Prelude> factorial 5
-
120
同样有个小缺陷。当输入负数的时候,返回值为1。我的观点仍然和上面一样,最好以抛出一个异常为佳。毕竟负数的阶乘就是一个异常嘛。
代码很简单,就是一个玩具程序。希望可以很快写成真正有用的Haskell代码。
阅读(7198) | 评论(1) | 转发(0) |