Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 21 additions & 32 deletions main.py
Original file line number Diff line number Diff line change
@@ -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

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

critical

There's a typo here. The variable m is not defined. This will cause a NameError at runtime. It should be n.

Suggested change
return m
return n

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Undefined Variable Reference

Variable 'm' is referenced but not defined, causing NameError at runtime. This will crash the application when nth_fibonacci_util is called with n <= 1.

Suggested change
return m
return n
Standards
  • ISO-IEC-25010-Reliability-Maturity
  • ISO-IEC-25010-Functional-Correctness-Appropriateness

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Undefined Variable Reference

Variable 'm' is referenced but not defined, causing NameError at runtime. This will crash the application when nth_fibonacci_util is called with n <= 1.

Suggested change
return m
return n
Standards
  • ISO-IEC-25010-Reliability-Maturity
  • ISO-IEC-25010-Functional-Correctness-Appropriateness


# Check if the result is already in the memo table
if memo[n] != -1:
Expand All @@ -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)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

critical

The call to nth_fibonacci_util is missing the memo argument, which will cause a TypeError because the function is defined to take two arguments. The nth_fibonacci function should be responsible for creating the memoization table and passing it to the utility function.

Suggested change
return nth_fibonacci_util(n)
memo = [-1] * (n + 1)
return nth_fibonacci_util(n, memo)

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing Parameter Reference

Function call to nth_fibonacci_util is missing the required memo parameter. This will cause TypeError at runtime when the function is called, breaking application functionality.

Suggested change
return nth_fibonacci_util(n)
# Create a memoization table and initialize with -1
memo = [-1] * (n + 1)
# Call the utility function
return nth_fibonacci_util(n, memo)
Standards
  • ISO-IEC-25010-Reliability-Fault-Tolerance
  • ISO-IEC-25010-Functional-Correctness-Appropriateness




Expand All @@ -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

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

This comment appears to be a leftover instruction from development and should be removed to keep the code clean.


Comment on lines +61 to +62
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unused Code Block

Comment indicates code removal but actual code remains. This creates confusion about what code should be removed and leaves potentially dead code in the codebase.

Suggested change
# Remove lines 57-59 entirely
Standards
  • Clean-Code-Dead-Code
  • Clean-Code-Comments

21 changes: 21 additions & 0 deletions test.py
Original file line number Diff line number Diff line change
@@ -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)
Comment on lines +14 to +18

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

These tests for input validation are a great addition, but they will fail with the current main.py. The main.py file defines nth_fibonacci twice. The version that gets imported and tested is the second, iterative one, which does not implement the TypeError and ValueError checks. These checks are only present in the first (broken) memoized implementation. This highlights the need to clean up main.py to have a single, correct implementation that matches the tests.


if __name__ == '__main__':
unittest.main()