From ee071ccc5ab76074c716c8309be1a9a02110a862 Mon Sep 17 00:00:00 2001 From: daniela sanchez Date: Wed, 13 Nov 2019 22:37:13 -0800 Subject: [PATCH] First 3 methods --- lib/recursive-methods.rb | 47 ++++++++++++++++++++++++++-------- test/recursion_writing_test.rb | 4 +-- 2 files changed, 38 insertions(+), 13 deletions(-) diff --git a/lib/recursive-methods.rb b/lib/recursive-methods.rb index fbf6faa..1691179 100644 --- a/lib/recursive-methods.rb +++ b/lib/recursive-methods.rb @@ -1,21 +1,46 @@ # Authoring recursive algorithms. Add comments including time and space complexity for each method. -# Time complexity: ? -# Space complexity: ? +# Time complexity: O(n), because of the size of the stack (number of methods that is accumulated in the stack to run) +# Space complexity: O(n), because of the size of this stack def factorial(n) - raise NotImplementedError, "Method not implemented" + #Base Case + return 1 if n == 0 + raise ArgumentError if n < 0 + + #Recursive Case + return n * factorial(n-1) end -# Time complexity: ? -# Space complexity: ? -def reverse(s) - raise NotImplementedError, "Method not implemented" +# Time complexity: O(n), it will iterate through all elements of string +# Space complexity: O(1), it will always use same number of variables (i, j, memo) +def reverse(s ) + i = 0 + j = s.length - 1 + + while i < j + memo = s[i] + s[i] = s[j] + s[j] = memo + + i += 1 + j -= 1 + end + return s end -# Time complexity: ? -# Space complexity: ? -def reverse_inplace(s) - raise NotImplementedError, "Method not implemented" +# Time complexity: O(n) ~ n/2 as increasing and decreasing both pointer in same call +# Space complexity: O(n), n/2 recursive calls, +# because both pointers are moving each time the method is called +def reverse_inplace(s, i = 0, j = s.length - 1) + #Base Case + return s if i >= j + + #Recursive Case + memo = s[i] + s[i] = s[j] + s[j] = memo + return reverse_inplace(s, i + 1, j - 1) + end # Time complexity: ? diff --git a/test/recursion_writing_test.rb b/test/recursion_writing_test.rb index 820810e..63e3dbc 100644 --- a/test/recursion_writing_test.rb +++ b/test/recursion_writing_test.rb @@ -38,7 +38,7 @@ end end -xdescribe "reverse" do +describe "reverse" do it "will reverse 'cat'" do # Arrange string = "cat" @@ -84,7 +84,7 @@ end -xdescribe "reverse_in_place" do +describe "reverse_in_place" do it "will reverse 'cat'" do # Arrange string = "cat"