三种实现斐波那契序列的代码,耗时不同

package main

import (
	"fmt"
	"time"
)

const LIM  = 41

var fibs [LIM]uint64

func main() {
	var result uint64 = 0
	start := time.Now()
	for i := 0; i < LIM; i++ {
		result = fibo(i)
		fmt.Printf("fibonacci(%d) is: %d\n", i, result)
	}

	end := time.Now()
	delta := end.Sub(start)
	fmt.Printf("longCalculation took the amount of time: %s\n", delta)

	start = time.Now()
	f := fibo2()
	for i := 0; i < LIM; i++ {
		fmt.Printf("fibonacci(%d) is: %d\n", i, f())
	}
	end = time.Now()
	delta = end.Sub(start)
	fmt.Printf("closure took the amount of time: %s\n", delta)

	start = time.Now()
	c := make(chan int, LIM)
	go fibo3(LIM, c)
	for i := range c {
		fmt.Println(i)
	}
	end = time.Now()
	delta = end.Sub(start)
	fmt.Printf("thread took the amount of time: %s\n", delta)
}

func fibo3(n int, c chan int) {
	x, y := 0, 1
	for i := 0; i < n; i++ {
		c <- x
		x, y = y, x+y
	}
	close(c)
}

func fibo2() func() int  {
	v1, v2 := 0, 1
	return func() int {
		temp := v1
		v1, v2 = v2, (v1 + v2)
		return temp
	}
}

func fibo(n int) (res uint64) {
	if fibs[n] != 0 {
		res = fibs[n]
		return
	}
	if n <= 1 {
		res = 1
	} else {
		res = fibo(n - 1) + fibo(n - 2)
	}
	fibs[n] = res
	return
}

执行结果如下:

fibonacci(0) is: 1
fibonacci(1) is: 1
fibonacci(2) is: 2
fibonacci(3) is: 3
fibonacci(4) is: 5
fibonacci(5) is: 8
fibonacci(6) is: 13
fibonacci(7) is: 21
fibonacci(8) is: 34
fibonacci(9) is: 55
fibonacci(10) is: 89
fibonacci(11) is: 144
fibonacci(12) is: 233
fibonacci(13) is: 377
fibonacci(14) is: 610
fibonacci(15) is: 987
fibonacci(16) is: 1597
fibonacci(17) is: 2584
fibonacci(18) is: 4181
fibonacci(19) is: 6765
fibonacci(20) is: 10946
fibonacci(21) is: 17711
fibonacci(22) is: 28657
fibonacci(23) is: 46368
fibonacci(24) is: 75025
fibonacci(25) is: 121393
fibonacci(26) is: 196418
fibonacci(27) is: 317811
fibonacci(28) is: 514229
fibonacci(29) is: 832040
fibonacci(30) is: 1346269
fibonacci(31) is: 2178309
fibonacci(32) is: 3524578
fibonacci(33) is: 5702887
fibonacci(34) is: 9227465
fibonacci(35) is: 14930352
fibonacci(36) is: 24157817
fibonacci(37) is: 39088169
fibonacci(38) is: 63245986
fibonacci(39) is: 102334155
fibonacci(40) is: 165580141
longCalculation took the amount of time: 95.737µs
fibonacci(0) is: 0
fibonacci(1) is: 1
fibonacci(2) is: 1
fibonacci(3) is: 2
fibonacci(4) is: 3
fibonacci(5) is: 5
fibonacci(6) is: 8
fibonacci(7) is: 13
fibonacci(8) is: 21
fibonacci(9) is: 34
fibonacci(10) is: 55
fibonacci(11) is: 89
fibonacci(12) is: 144
fibonacci(13) is: 233
fibonacci(14) is: 377
fibonacci(15) is: 610
fibonacci(16) is: 987
fibonacci(17) is: 1597
fibonacci(18) is: 2584
fibonacci(19) is: 4181
fibonacci(20) is: 6765
fibonacci(21) is: 10946
fibonacci(22) is: 17711
fibonacci(23) is: 28657
fibonacci(24) is: 46368
fibonacci(25) is: 75025
fibonacci(26) is: 121393
fibonacci(27) is: 196418
fibonacci(28) is: 317811
fibonacci(29) is: 514229
fibonacci(30) is: 832040
fibonacci(31) is: 1346269
fibonacci(32) is: 2178309
fibonacci(33) is: 3524578
fibonacci(34) is: 5702887
fibonacci(35) is: 9227465
fibonacci(36) is: 14930352
fibonacci(37) is: 24157817
fibonacci(38) is: 39088169
fibonacci(39) is: 63245986
fibonacci(40) is: 102334155
closure took the amount of time: 65.417µs
0
1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765
10946
17711
28657
46368
75025
121393
196418
317811
514229
832040
1346269
2178309
3524578
5702887
9227465
14930352
24157817
39088169
63245986
102334155
thread took the amount of time: 76.03µs

Process finished with exit code 0

fibo使用的是内存缓存,最普通的实现方式,耗时最长;

fibo2使用的是函数闭包,耗时最短

fibo3使用的是协程+channel,耗时接近闭包结果

转载于:https://my.oschina.net/OHC1U9jZt/blog/3015398

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值