#! /usr/bin/env python3

from decorators import counter, get_counter

# Dekorator sorgt dafuer, dass Python nach Compiler in der Ausfuehrung
# die Funktion fak veraendert:
#
#   fak = counter(fak)
#   fak = counter(<urspruengliche Funktionsreferenz>)
@counter
def fak(n):
    if type(n) is not int or n < 0:
        raise TypeError("Illegal type")

    if n == 0:
        return 1

    return n * fak(n-1)


# reset_counter(fak)
print("6! =", fak(6))
print("Anzahl Aufrufe:", get_counter(fak))
# reset_counter(print)
