From 48b3b6645f54e387b6c6762df52d0ce818ade077 Mon Sep 17 00:00:00 2001 From: Sara Shah Baig Date: Mon, 11 Nov 2019 21:16:25 -0800 Subject: [PATCH 1/2] completed --- test/recursion_writing_test.rb | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/test/recursion_writing_test.rb b/test/recursion_writing_test.rb index 820810e..f73cf0d 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" @@ -129,7 +129,7 @@ end end -xdescribe "bunny" do +describe "bunny" do it "returns 0 for 0 bunnies" do # Arrange count = 0 @@ -164,7 +164,7 @@ end end -xdescribe "nested" do +describe "nested" do it "will return true for empystring" do # Arrange string = "" @@ -210,7 +210,7 @@ end end -xdescribe "search" do +describe "search" do it "will return false for empty array" do # Arrange item = "a" @@ -260,7 +260,7 @@ end end -xdescribe "is_palindrome" do +describe "is_palindrome" do it "will return true for emptystring" do # Arrange string = "" @@ -295,7 +295,7 @@ end end -xdescribe "digit_match" do +describe "digit_match" do it "returns 4 for 1072503891 and 62530841" do # Arrange num1 = 1072503891 From 00776d90ad8506a882d0b43548c2ae2ed1122ae1 Mon Sep 17 00:00:00 2001 From: Sara Shah Baig Date: Mon, 11 Nov 2019 21:17:25 -0800 Subject: [PATCH 2/2] completed --- lib/recursive-methods.rb | 76 +++++++++++++++++++++++++++++++++------- 1 file changed, 64 insertions(+), 12 deletions(-) diff --git a/lib/recursive-methods.rb b/lib/recursive-methods.rb index fbf6faa..937fb9c 100644 --- a/lib/recursive-methods.rb +++ b/lib/recursive-methods.rb @@ -1,49 +1,101 @@ # Authoring recursive algorithms. Add comments including time and space complexity for each method. -# Time complexity: ? -# Space complexity: ? +# Time complexity: 0(n) +# Space complexity: 0(n) def factorial(n) - raise NotImplementedError, "Method not implemented" + raise ArgumentError if n < 0 + return 1 if n == 1 || n == 0 + return n * factorial(n-1) end -# Time complexity: ? -# Space complexity: ? +# Time complexity: 0(n) +# Space complexity: 0(n) def reverse(s) - raise NotImplementedError, "Method not implemented" + + return s if s.length < 2 + return reverse(s[1..-1]) + s[0] + end # Time complexity: ? # Space complexity: ? def reverse_inplace(s) - raise NotImplementedError, "Method not implemented" + return s if s.length == 0 + return reverse(s[1..-1]) + s[0] end # Time complexity: ? # Space complexity: ? def bunny(n) - raise NotImplementedError, "Method not implemented" + return 0 if n == 0 + return 2 if n == 1 + return bunny(n - 1) + bunny(1) + end + # Time complexity: ? # Space complexity: ? def nested(s) - raise NotImplementedError, "Method not implemented" + # return nested_helper(s[1..-1]) + paren_end = s.index(')') + return !s.include?('(') if paren_end.nil? + + paren_start = s[0...paren_end].rindex('(') + + return false if paren_start.nil? + + return nested(s[1..paren_start]+s[paren_end+1..-1]) + +end + +def nested_helper(s) + return true if s.empty? + return false if s.length.odd? + return nested_helper(s) end # Time complexity: ? # Space complexity: ? def search(array, value) - raise NotImplementedError, "Method not implemented" + return false if array.nil? + return true if array[0] == value + return search(array[1..-1],value) end # Time complexity: ? # Space complexity: ? def is_palindrome(s) - raise NotImplementedError, "Method not implemented" + return true if s.empty? || s.length ==1 + return false if s[0] != s[s.length - 1] + return is_palindrome_helper(s, 1) + +end + +def is_palindrome_helper(s, index) + return true if s.empty? || s.length ==1 + return false if s[0] != s[s.length - index] + is_palindrome_helper(s[1..s.length - index - 1], 1) + end # Time complexity: ? # Space complexity: ? def digit_match(n, m) - raise NotImplementedError, "Method not implemented" + + return 1 if n == 0 && m == 0 + count = 0 + if n % 10 == m % 10 + count += 1 + end + if (n / 10 == 0 || m / 10 == 0) + return count + end + + return count + digit_match(n / 10, m / 10) + +end + +def digit_match_helper(n, m) + end \ No newline at end of file