fibonacci_memoization.go 812 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. // fibonacci_memoization.go
  2. package main
  3. import (
  4. "fmt"
  5. "time"
  6. )
  7. const LIM = 41
  8. var fibs [LIM]uint64
  9. func main() {
  10. var result uint64 = 0
  11. start := time.Now()
  12. for i := 0; i < LIM; i++ {
  13. result = fibonacci(i)
  14. fmt.Printf("fibonacci(%d) is: %d\n", i, result)
  15. }
  16. end := time.Now()
  17. delta := end.Sub(start)
  18. fmt.Printf("longCalculation took this amount of time: %s\n", delta)
  19. }
  20. func fibonacci(n int) (res uint64) {
  21. // memoization: check if fibonacci(n) is already known in array:
  22. if fibs[n] != 0 {
  23. res = fibs[n]
  24. return
  25. }
  26. if n <= 1 {
  27. res = 1
  28. } else {
  29. res = fibonacci(n-1) + fibonacci(n-2)
  30. }
  31. fibs[n] = res
  32. return
  33. }
  34. /*
  35. Output: LIM=40:
  36. normal (fibonacci.go): the calculation took this amount of time: 4.730270 s
  37. with memoization: the calculation took this amount of time: 0.001000 s
  38. */