diff --git a/main.py b/main.py index 9c5fb5d..deaf7e9 100644 --- a/main.py +++ b/main.py @@ -1,23 +1,9 @@ -def nth_fibonacci(n): - - # Base case: if n is 0 or 1, return n - if n <= 1: - return n - - # Recursive case: sum of the two preceding Fibonacci numbers - return nth_fibonacci(n - 1) + nth_fibonacci(n - 2) - -n = 5 -result = nth_fibonacci(n) -print(result) - - # Function to calculate the nth Fibonacci number using memoization def nth_fibonacci_util(n, memo): # Base case: if n is 0 or 1, return n if n <= 1: - return n + return m # Check if the result is already in the memo table if memo[n] != -1: @@ -30,21 +16,25 @@ def nth_fibonacci_util(n, memo): return memo[n] -# Wrapper function that handles both initialization -# and Fibonacci calculation def nth_fibonacci(n): - - # Create a memoization table and initialize with -1 - memo = [-1] * (n + 1) - - # Call the utility function - return nth_fibonacci_util(n, memo) - - -if __name__ == "__main__": - n = 5 - result = nth_fibonacci(n) - print(result) + """ + Calculate the nth Fibonacci number. + + Args: + n: A non-negative integer + + Returns: + The nth number in the Fibonacci sequence + + Raises: + TypeError: If n is not an integer + ValueError: If n is negative + """ + if not isinstance(n, int): + raise TypeError("Input must be an integer") + if n < 0: + raise ValueError("Input must be non-negative") + return nth_fibonacci_util(n) @@ -68,6 +58,5 @@ def nth_fibonacci(n): # Return the nth Fibonacci number return dp[n] -n = 5 -result = nth_fibonacci(n) -print(result) +# Remove lines 57-59 entirely + diff --git a/test.py b/test.py new file mode 100644 index 0000000..10977f2 --- /dev/null +++ b/test.py @@ -0,0 +1,21 @@ +import unittest +from main import nth_fibonacci + +class TestFibonacci(unittest.TestCase): + def test_base_cases(self): + self.assertEqual(nth_fibonacci(0), 0) + self.assertEqual(nth_fibonacci(1), 1) + + def test_positive_values(self): + self.assertEqual(nth_fibonacci(2), 1) + self.assertEqual(nth_fibonacci(5), 5) + self.assertEqual(nth_fibonacci(10), 55) + + def test_input_validation(self): + with self.assertRaises(TypeError): + nth_fibonacci('5') + with self.assertRaises(ValueError): + nth_fibonacci(-1) + +if __name__ == '__main__': + unittest.main()