#!/usr/bin/ruby func fib_iter(n) { var fib = [1, 1]; { fib = [fib[-1], fib[-2] + fib[-1]] } \ * (n - fib.len); return fib[-1]; } func fib_rec(n) { n < 2 ? n : (__FUNC__(n-1) + __FUNC__(n-2)); } func fib_mem (n) { static c = []; n < 2 && return n; c[n] := (__FUNC__(n-1) + __FUNC__(n-2)); } var a = fib_iter(12) var b = fib_rec(12) var c = fib_mem(35) say "fib(12) = #{a}" say "fib(35) = #{c}" assert_eq(a, 144) assert_eq(b, a) assert_eq(c, 9227465)