fibo = ->(n) { Enumerator.new { |y, a=[0,1]| loop { y << a[-1]; a << a[-2..-1].reduce(:+) } }.take n } fibo[10] def fibonacci # Enumerator.new { |y, a=1, b=1| loop { y << a; a, b = b, a + b } } Enumerator.new { |y, a=[0,1]| loop { y << a[-1]; a << a[-2..-1].reduce(:+) } } end fibonacci.lazy.select(&:even?).first 10 # using Hash fib = Hash.new {|h, k| h[k] = k < 3 ? 1 : h[k-1] + h[k-2]} # https://blog.arkency.com/2014/07/hidden-features-of-ruby-you-may-dont-know-about/ fibbonacci = Hash.new do |accumulator, index| accumulator[index] = fibbonacci[index - 2] + fibbonacci[index - 1] end.update(0 => 0, 1 => 1)