もりきゅうです。
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