def calculate_fibonacci_number(n : int) -> int:
    """
    Calculate and return the `n` th fibonacci number.

    Args:
        n (int) : specify term.
    
    Exceptions:
        - TypeError: when the type of `n` is not int.
        - ValueError: when `n` is negative.
    
    Note:
        This solution obtains the answer by tracing from the target term to the first term.

        0   1   1   3 ... A(n - 2) A(n - 1) A(n)
                              ↑        ↑      ↓
                              `--------⊥------
    
    WARNING:
        This implementation increases function calls exponentially.
        And this recomputes Fibonacci numbers that have already computed.
    """
    if type(n) != int:
        raise TypeError("`n` MUST be int but {} was passed.".format(type(n)))
    
    if n < 0:
        raise ValueError("`n` MUST be a natural but a negative is passed.")
    
    if n == 0:
        return 0
    elif n == 1:
        return 1
    else:
        return (calculate_fibonacci_number(n - 2) + calculate_fibonacci_number(n - 1))