Раздел «Язык Ruby».FactorialSamples:

Вычисление факториала

Простейший код

puts  (1..20).inject(1) {|s,i| s*i}

Отдельная функция

def factorial(n)
  (1..n).inject(1){|f,i| f*i}
end

Рекурсия с запоминанием

def factorial(n)
  (@f||={})[n] ||=  (n <= 1) ? 0 : n * factorial(n - 1)
end

Пример динамической смены класса

f = 1
(1..20).each { |i|
   f *= i
   puts "#{f} #{f.class}"
}

Вывод программы:

>ruby factorial.rb
1 Fixnum
2 Fixnum
6 Fixnum
24 Fixnum
120 Fixnum
720 Fixnum
5040 Fixnum
40320 Fixnum
362880 Fixnum
3628800 Fixnum
39916800 Fixnum
479001600 Fixnum
6227020800 Bignum
87178291200 Bignum
1307674368000 Bignum
20922789888000 Bignum
355687428096000 Bignum
6402373705728000 Bignum
121645100408832000 Bignum
2432902008176640000 Bignum