"""
A module to show off the dangers of recursion.

What happens when you forget a base case.  Try this module out and see.

Author: Walker M. White (wmw2)
Date:   October 10, 2017 (Python 3 Version)
"""
import sys

# Allow us to go really deep
sys.setrecursionlimit(999999999)

def factorial(n):
    """
    Returns: n!
    
    Parameter n: the number to compute
    Precondition: n is a nonnegative integer
    """
    assert type(n) == int, repr(n)+' is not an int'     # get in the habit
    assert n >= 0, repr(n)+' is negative'               # get in the habit

    #if n==0: # Base case
    #    return 1
    
    # Recursive case.
    return n*factorial(n-1)