File: fib_go_value.go

package info (click to toggle)
smlsharp 4.1.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 123,732 kB
  • sloc: ansic: 16,725; sh: 4,347; makefile: 2,191; java: 742; haskell: 493; ruby: 305; cpp: 284; pascal: 256; ml: 255; lisp: 141; asm: 97; sql: 74
file content (41 lines) | stat: -rw-r--r-- 916 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package main
import ( "fmt"; "os"; "strconv"; "time" )

var repeat = 10
var size = 40
var cutOff = 10

func fib(n int) int {
    if n <= 1 { return n } else { return fib (n - 1) + fib (n - 2) }
}

func fibp(n int) int {
    if n <= cutOff { return fib(n) }
    c := make(chan int)
    go func() { c <- fibp(n - 1) } ()
    n2 := fibp(n - 2)
    n1 := <-c
    return n1 + n2
}

func doit() int {
    return fibp(size)
}

func rep() {
  for i := 0; i < repeat; i++ {
    t1 := time.Now()
    r := doit()
    t2 := time.Now()
    fmt.Printf(" - {result: %d, time: %.6f}\n", r, t2.Sub(t1).Seconds())
  }
}

func main() {
  if len(os.Args) > 1 { repeat, _ = strconv.Atoi(os.Args[1]) }
  if len(os.Args) > 2 { size, _ = strconv.Atoi(os.Args[2]) }
  if len(os.Args) > 3 { cutOff, _ = strconv.Atoi(os.Args[3]) }
  fmt.Printf(" bench: fib_go_value\n size: %d\n cutoff: %d\n results:\n",
             size, cutOff);
  rep()
}