| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- // fibonacci_memoization.go
- 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 = fibonacci(i)
- fmt.Printf("fibonacci(%d) is: %d\n", i, result)
- }
- end := time.Now()
- delta := end.Sub(start)
- fmt.Printf("longCalculation took this amount of time: %s\n", delta)
- }
- func fibonacci(n int) (res uint64) {
- // memoization: check if fibonacci(n) is already known in array:
- if fibs[n] != 0 {
- res = fibs[n]
- return
- }
- if n <= 1 {
- res = 1
- } else {
- res = fibonacci(n-1) + fibonacci(n-2)
- }
- fibs[n] = res
- return
- }
- /*
- Output: LIM=40:
- normal (fibonacci.go): the calculation took this amount of time: 4.730270 s
- with memoization: the calculation took this amount of time: 0.001000 s
- */
|