if (cas simple):
    (solution immédiate)
else:
    (solution récursive,
     impliquant un cas plus simple que le problème original)

"""
Explanation: Préambule : nous avons commencé par faire un rappel sur la récursivité en ré-écrivant le comportement de factorielle au tableau et en déroulant l'algorithme à la main. 
Nous rappelons qu'une fonction récursive est une fonction qui s'appelle elle-même. Chaque appel à la fonction est indépendant des autres. Le moyen le plus simple pour réussir l'écriture d'une fonction récursive est de toujours commencer par exprimer le cas simple (la solutiotin immédiate), puis d'écrire le cas récursif (la solution qui fait appel à la solution plus simple).
Ci-dessous, vous trouverez le squelette d'une fonction récursive typique.
End of explanation
"""


def fact(n):
    """
    :entrée n: int
    :pré-cond: n > 0
    :sortie f: int
    :post-cond: f = n * (n-1) * ... * 1
    """
    if n == 1:
        f = 1
    else:
        f = fact(n-1)*n
    print("--- fact({}) = {}".format(n,f))
    return f

print(fact(6))


"""
Explanation: Exercice Robozzle : nous avons ensuite résolu l'exercice Robozzle n°656, l'objectif était de vous faire comprendre le fonctionnement de la pile d'appels récursifs. http://robozzle.com/js/play.aspx?puzzle=656
End of explanation
"""


