Guest User

Untitled

a guest
Jun 19th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.91 KB | None | 0 0
  1. def fib_naive(n)
  2. if n == 0 || n == 1
  3. n
  4. else
  5. fib_naive(n-1) + fib_naive(n-2)
  6. end
  7. end
  8.  
  9. def fib_iterative_algorithm(n)
  10. fib_iter(n, 0, 1)
  11. end
  12.  
  13. def fib_iter(n, k1, k2)
  14. if n.zero?
  15. k1
  16. else
  17. fib_iter(n-1, k2, k1+k2)
  18. end
  19. end
  20.  
  21. def fib_iterative_optimization(n)
  22. k1 = 0
  23. k2 = 1
  24. while n > 0
  25. n -= 1
  26. (k1, k2) = [k2, k1+k2]
  27. end
  28. k1
  29. end
  30.  
  31. require 'benchmark'
  32.  
  33. n = 10_000
  34. Benchmark.bm do |b|
  35. b.report("naive") { n.times { fib_naive(8) } }
  36. b.report("iterative algorithm") { n.times { fib_iterative_algorithm(8) } }
  37. b.report("iterative optimization") { n.times { fib_iterative_optimization(8) } }
  38. end
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47. % ruby fibs.rb
  48. user system total real
  49. naive 0.560000 0.080000 0.640000 ( 0.662477)
  50. iterative algorithm 0.080000 0.020000 0.100000 ( 0.088168)
  51. iterative optimization 0.070000 0.000000 0.070000 ( 0.079830)
Add Comment
Please, Sign In to add comment