diff --git a/lib/factorial.rb b/lib/factorial.rb index 6a4a408..091cc32 100644 --- a/lib/factorial.rb +++ b/lib/factorial.rb @@ -1,6 +1,15 @@ # Computes factorial of the input number and returns it -# Time complexity: ? -# Space complexity: ? +# Time complexity: O(n), where n is the value of the number +# Space complexity: O(1) def factorial(number) - raise NotImplementedError + if !number + raise ArgumentError, "Number cannot be nil" + end + + product = number > 1 ? number : 1 + while number >= 2 + product = product *= (number - 1) + number -= 1 + end + return product end diff --git a/specs/factorial_spec.rb b/specs/factorial_spec.rb index de28055..287ce5c 100644 --- a/specs/factorial_spec.rb +++ b/specs/factorial_spec.rb @@ -1,6 +1,6 @@ -require 'minitest/autorun' -require 'minitest/reporters' -require_relative '../lib/factorial' +require "minitest/autorun" +require "minitest/reporters" +require_relative "../lib/factorial" describe "factorial" do describe "basic tests" do @@ -17,7 +17,7 @@ describe "edge cases" do # if the parameter is an object, check for nil it "nil object is not an integer" do - proc {factorial(nil)}.must_raise ArgumentError + proc { factorial(nil) }.must_raise ArgumentError end it "factorial(0) = 1" do