golang 编程之fibonacci number

4700阅读 0评论2013-11-12 Bean_lee
分类:LINUX

    最近在学习golang这门语言。今天写了fibonacci number的计算:  熟悉一下基本的语法,function的写法。编程语言这种东西需要的是实践,多读多写,才能运用自如,希望自己能掌握这门语言。
    这个是快速的版本:
  1. package main

  2. import "fmt"

  3. func fib(n uint) (ret int64){
  4.     
  5.     var index uint = 0
  6.     
  7.     var i int64 = 1
  8.     var j int64 = 0
  9.     
  10.     for index < n {
  11.         index += 1
  12.         i,j = i+j,i
  13.     }
  14.     
  15.     return j
  16. }

  17. func main(){
  18.     
  19.     fmt.Printf("%d\n",fib(40))
  20. }
    下面这个版本是低效的版本:
  1. package main
  2. import "fmt"

  3. func fib(n uint) uint64{
  4.     
  5.     if n == 0{
  6.         return 0
  7.     }else if n == 1 {
  8.         return 1
  9.     }else {
  10.         return    fib(n-1)+fib(n-2)
  11.     }
  12. }


  13. func main(){
  14.     fmt.Printf("%d\n",fib(40))
  15. }
    低效的版本更好的反映了fibonacci number的特点,但是效率狂低,SICP(计算机程序的构造和解释)完美的解释了效率低的原因。所以建议使用第一个。
    实验证明,当计算fibnacci(60)的时候,fib_slow慢到不能忍受,fib的效率依然是O(n)。
  1. manu@manu-hacks:~/code/go/self$ time ./fib
  2. 102334155

  3. real    0m0.008s
  4. user    0m0.004s
  5. sys    0m0.000s
  6. manu@manu-hacks:~/code/go/self$ time ./fib_slow
  7. 102334155

  8. real    0m2.643s
  9. user    0m2.604s
  10. sys    0m0.004s
  11. manu@manu-hacks:~/code/go/self$

参考文献:
1 An introduction to programming in GO

上一篇:PostgreSQL之sequence
下一篇:golang编程之获取命令行参数及环境变量