Тестирование метода поиска факториала числа в Ruby
Порой требуется найти факториал числа в ruby. Встроенного метода нет, поэтому добавим в класс Integer свой. Вот реализации поиска факториала найденные в сети, какой из них лучше?
После проведения теста в ruby 1.8.7 (2012-02-08 patchlevel 358) [i686-darwin12.2.0] оказалось что третий ( обозначен как inject_factorial) в ruby 1.9.2 результат примерно такой же.
Третий метод, показал себя быстрее других. inject_factorial will be better. Ruby factorial function. Testing ruby factorial function.
После проведения теста в ruby 1.8.7 (2012-02-08 patchlevel 358) [i686-darwin12.2.0] оказалось что третий ( обозначен как inject_factorial) в ruby 1.9.2 результат примерно такой же.
require "benchmark"
class Integer
def factorial_recursive
self <= 1 ? 1 : self * (self - 1).factorial
end
def factorial_iterative
f = 1; for i in 1..self; f *= i; end; f
end
def inject_factorial
self.downto(1).inject(:*)
end
alias :factorial :inject_factorial
end
Benchmark.bm(70) do |x|
x.report("factorial_recursive:") { (1..120).each { |i| i.factorial_recursive } }
x.report("factorial_iterative:") { (1..120).each { |i| i.factorial_iterative }}
x.report("inject_factorial:") { (1..120).each { |i| i.inject_factorial }}
end
Третий метод, показал себя быстрее других. inject_factorial will be better. Ruby factorial function. Testing ruby factorial function.
Комментарии