""" 0509.1 - Solution 1 - Iterative (Bottom-Up) """
#####################################################################################
# Classes
#####################################################################################
class Solution:
"""Solution Class"""
def fib(self, n: int) -> int:
"""Fibonacci Number Function"""
a, b = 0, 1
for _ in range(n):
a, b = b, a + b
return a
#####################################################################################
# Functions
#####################################################################################
def testcase():
"""Test Function"""
print(Solution().fib(0)) # Expected: 0
print(Solution().fib(1)) # Expected: 1
print(Solution().fib(2)) # Expected: 1
print(Solution().fib(3)) # Expected: 2
print(Solution().fib(4)) # Expected: 3
print(Solution().fib(10)) # Expected: 55
#####################################################################################
# Main
#####################################################################################
if __name__ == "__main__":
testcase()
""" 0509.2 - Solution 2 - Recursive with Memoization """
#####################################################################################
# Imports
#####################################################################################
from functools import lru_cache
#####################################################################################
# Classes
#####################################################################################
class Solution:
"""Solution Class"""
@lru_cache(maxsize=None)
def fib(self, n: int) -> int:
"""Fibonacci Number Function"""
if n < 2:
return n
return self.fib(n - 1) + self.fib(n - 2)
#####################################################################################
# Functions
#####################################################################################
def testcase():
"""Test Function"""
print(Solution().fib(0)) # Expected: 0
print(Solution().fib(1)) # Expected: 1
print(Solution().fib(2)) # Expected: 1
print(Solution().fib(3)) # Expected: 2
print(Solution().fib(4)) # Expected: 3
print(Solution().fib(10)) # Expected: 55
#####################################################################################
# Main
#####################################################################################
if __name__ == "__main__":
testcase()