From 3c04d3c5cec3b6ed8764455d655280bf10783db3 Mon Sep 17 00:00:00 2001 From: Angela Date: Sun, 21 Apr 2019 15:09:13 -0700 Subject: [PATCH 1/2] recursive solution --- lib/fibonacci.rb | 45 ++++++++++++++++++++++++++++++++++++++++- specs/fibonacci_spec.rb | 11 +++++----- 2 files changed, 50 insertions(+), 6 deletions(-) diff --git a/lib/fibonacci.rb b/lib/fibonacci.rb index 606755b..bd0f2bc 100644 --- a/lib/fibonacci.rb +++ b/lib/fibonacci.rb @@ -7,6 +7,49 @@ # Time complexity: ? # Space complexity: ? +def fibonacci_non_recursion(n) + # n i step nth fibonacci number in series + # if n = 5 + # 0 1 1 2 3 + # set first_num = 0 + # set second_num = 1 + # set count of number to be 3 + # until the count is greater than the input n + # new number is equal to first_num + second_num + # reassign first_num and second_num + + if n.class != Integer || n < 0 + raise ArgumentError, "Your input #{n} is not an non-negative integer!" + end + + first_num = 0 + second_num = 1 + fibonacci_num = 0 + count = 2 + + if n == 0 + return fibonacci_num + elsif n == 1 + return fibonacci_num + 1 + else + until count > n + fibonacci_num = first_num + second_num + first_num = second_num + second_num = fibonacci_num + count += 1 + end + end + return fibonacci_num +end + def fibonacci(n) - raise NotImplementedError + if n.class != Integer || n < 0 + raise ArgumentError, "Your input #{n} is not an non-negative integer!" + end + + if n < 2 + return n + else + return fibonacci(n - 1) + fibonacci(n - 2) + end end diff --git a/specs/fibonacci_spec.rb b/specs/fibonacci_spec.rb index f518644..604e0fa 100644 --- a/specs/fibonacci_spec.rb +++ b/specs/fibonacci_spec.rb @@ -1,6 +1,7 @@ -require 'minitest/autorun' -require 'minitest/reporters' -require_relative '../lib/fibonacci' +require "minitest/autorun" +require "minitest/reporters" +require "minitest/pride" +require_relative "../lib/fibonacci" describe "fibonacci" do describe "basic tests" do @@ -29,11 +30,11 @@ describe "edge cases" do # if the parameter is an object, check for nil it "nil object is not an integer" do - proc {fibonacci(nil)}.must_raise ArgumentError + proc { fibonacci(nil) }.must_raise ArgumentError end it "negative input" do - proc {fibonacci(-9)}.must_raise ArgumentError + proc { fibonacci(-9) }.must_raise ArgumentError end it "zero input" do From 458b8c11c273642180a02fb280ce86805c1fe7a0 Mon Sep 17 00:00:00 2001 From: Angela Date: Sun, 21 Apr 2019 15:10:49 -0700 Subject: [PATCH 2/2] added time/space complexity --- lib/fibonacci.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/fibonacci.rb b/lib/fibonacci.rb index bd0f2bc..526c3f2 100644 --- a/lib/fibonacci.rb +++ b/lib/fibonacci.rb @@ -5,8 +5,8 @@ # .... # e.g. 6th fibonacci number is 8 -# Time complexity: ? -# Space complexity: ? +# Time complexity: O(n) where n is size of input +# Space complexity: O(1) def fibonacci_non_recursion(n) # n i step nth fibonacci number in series # if n = 5