もりきゅうです。

sample/fib.rb よりちょい早い版。1 重再帰にしただけですが..
-- fib2.rb
def fib(n, i=1, prev=0, this=1)
  if n == i
    this
  else
    fib n, i+1, this, this+prev
  end
end
print fib(20), "\n"
--

fib2.rb より早いかと思いきやそんなことはなかった読みにくい版。

-- fib3.rb
# Binet's formula
def fib(n)
  root_5 = Math::sqrt 5
  golden_rate = (1+root_5)/2
  golden_rate_anti = (1-root_5)/2
  ((golden_rate ** n - golden_rate_anti ** n)/root_5).to_i
end
print fib(20), "\n"
--
# 黄金率って golden_rate なのか? > 私^^;

----
Kazuhiro Yoshida  moriq.kazuhiro / nifty.ne.jp