# TP 14: RECURSIVITE

# Ce fichier est le "squelette" du TP 14.
# Dans ce document, les lignes à compléter sont notées (LAC)

##################################################################
# EXEMPLE 0 - Définition itérative de la factorielle (que vous connaissez déjà)
##################################################################

def fact_iter(n):
    p =   # (LAC1)
    for k in range(1,n+1):
        ... # (LAC2)
    return p

##################################################################
# EXEMPLE 1 - Définition récursive de la factorielle
##################################################################

def fact_rec(n):
    assert   # on vérifie que n est positif (LAC1)
    if n==0:
        return   # terminaison (LAC2)
    else:
        return   # appel récursif (LAC3)

##################################################################
# EXEMPLE 1 BIS - Définition récursive des coefficients binomiaux
##################################################################

def bino(n,p):
    if n == 0:
        return 0
    if p == 0:
        return   # (LAC1)
    if p == 1:
        return   # (LAC2)
    if p > 0 and n > 0:
        return    # (LAC3)

##################################################################
# FIGURES ALPHANUMERIQUES
##################################################################

# Exemple de l'énoncé

def figure(n):
    if n>0:
        print(n*'*')
        figure(n-1) # appel récursif

# EXERCICE 1

def figureB(n):
    if n>0:
        ... # (LAC1)
        ... # (LAC2)

##################################################################
# ALGORITHME DE RECHERCHE DICHOTOMIQUE RECURSIVE
##################################################################

# EXERCICE 2

def DichoREC(x,L):
    if  : # (LAC1)
        return False
    p =    # indice de l'élément "central" (LAC2)
    if x == L[p]:
        return   # (LAC3)
    elif x < L[p]:
        return DichoREC(...,...) # (LAC4)
    else:
        return DichoREC(...,...) # (LAC5)

##################################################################
# ALGORITHME DE TRI ET RECURSIVITE
##################################################################

# EXERCICE 3 (on demande une fonction non récursive ici)

def Separe(L):
    LG = [L[0]]
    LD = []
    x = L[0]

    # PARTIE A COMPLETER (plusieurs lignes!)

    return LG,LD

# EXERCICE 4 - Algorithme de tri rapide

def TriRapide(L):
    if len(L) < 2:
        return # LAC1

    # PARTIE A COMPLETER

    return