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

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, 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,耗时接近闭包结果

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值