Sha256: 277d95b69bcdd1329a7a19ce89792b41b7cbf11f62c290ab88fbfa5c04dace42

Contents?: true

Size: 844 Bytes

Versions: 1

Compression:

Stored size: 844 Bytes

Contents

class Integer

  # Calculate the factorial of an integer.
  #
  #   2.factorial  #=> 2
  #   3.factorial  #=> 6
  #   3.factorial  #=> 24
  #
  #--
  # TODO Improve speed! Don't use inject.
  #++
  def factorial
    return 1 if self == 0
    #self == 0 ? 1 : ( self * (self-1).factorial )
    f = (1..self.abs).inject { |state, item| state * item }
    return self < 0 ? -f : f
  end

  alias_method( :fact, :factorial )

end


#  _____         _
# |_   _|__  ___| |_
#   | |/ _ \/ __| __|
#   | |  __/\__ \ |_
#   |_|\___||___/\__|
#
=begin test

  require 'test/unit'

  class TCInteger < Test::Unit::TestCase

    def test_factorial
      assert_equal( 1, 0.factorial )
      assert_equal( 1, 1.factorial )
      assert_equal( 2, 2.factorial )
      assert_equal( 6, 3.factorial )
      assert_equal( 24, 4.factorial )
    end

  end

=end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
facets-0.9.0 lib/nano/integer/factorial.rb