-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfib.go
41 lines (36 loc) · 801 Bytes
/
fib.go
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 (
"flag"
"fmt"
)
var (
cachedEntries []int
useCache = flag.Bool("cache", false, "Use cache?")
)
func cachedFib(x int) int {
if x < len(cachedEntries) {
return cachedEntries[x]
}
f := fib(x)
cachedEntries = append(cachedEntries, f)
return f
}
func fib(x int) int {
if x == 0 || x == 1 {
return 1
}
if *useCache {
return cachedFib(x-1) + cachedFib(x-2)
}
return fib(x-1) + fib(x-2)
}
func main() {
flag.Parse()
if *useCache {
fmt.Println("Cache has been enabled.")
}
for x := 0; x <= 40; x++ {
fmt.Printf("%d ", fib(x))
}
fmt.Println()
}