Skip to content

Instantly share code, notes, and snippets.

@ananthakumaran
Created July 26, 2010 13:40
Show Gist options
  • Save ananthakumaran/490554 to your computer and use it in GitHub Desktop.
Save ananthakumaran/490554 to your computer and use it in GitHub Desktop.
def time_taken
start_time = Time.now
yield
Time.now - start_time
end
def fib(n)
if n < 2
n
else
fib(n - 1) + fib(n - 2)
end
end
#puts time_taken { puts fib(1000) } # too slow
@cache = []
def fast_fib(n)
if n < 2
n
elsif @cache[n]
@cache[n]
else
@cache[n] = fast_fib(n-1) + fast_fib(n-2)
end
end
puts time_taken { puts fast_fib(1000) }
class LazyFib
include Enumerable
def initialize
@lazy_fib = Fiber.new do
x,y = 0,1
loop do
Fiber.yield y
x,y = y,x+y
end
end
end
def each
loop { yield @lazy_fib.resume }
end
end
puts time_taken { puts LazyFib.new.take(1000).last }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment