O(log n)でフィボナッチ数のN番目を求める方法をRubyで実装してみました。この間のSICP勉強会で教えてもらったやつです。 まず普通のフィボナッチ数。こいつはO(n)です。 def fib1(n) a, b = 0, 1 n.times do a, b = a + b, a end a end O(log n)版のフィボナッチ数。なんでこれでフィボナッチ数が求められるかは、ここを参照してください。ちなみにRubyのMatrixの**は、O(log n)で実装されています。 require 'matrix' def fib2(n) a = Matrix[[1, 1], [1, 0]] b = Matrix[[0], [1]] (a ** n * b)[0, 0] end こんな感じでベンチマークをとってみました。 require 'benchmark' n = 100_000 Ben