#!/usr/bin/ruby
func fib_cf(n) {
define S = sqrt(5);
define T = ((1+S) / 2);
define U = (2 / (1+S));
(T**n - (U**n * cos(Num.pi(2*n) * n))) / S -> round(0);
}
func fib_rec(n) is cached {
n > 1 ? (__FUNC__(n-1) + __FUNC__(n-2)) : n;
}
range(10, 20).each { |i|
var f = fib_cf(i);
say "F(#{i}) = #{f}";
assert_eq(f, fib_rec(i));
}