#!/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)