0% ont trouvé ce document utile (0 vote)
1 vues23 pages

Cours 3

Transféré par

oscar.ilyas
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
1 vues23 pages

Cours 3

Transféré par

oscar.ilyas
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Définitions et exemple à un seul appel

La récursivité pas à pas


Terminaison et validité d’une fonction récursive
Terminaison et validité de la fonction factorielle
Recherche d’un élément dans un tableau non trié
p
Calcul de Cn

Terminaison et validité d’un algorithme


récursif

Alix Munier-Kordon et Maryse Pelletier

LIP6
Sorbonne Université
Paris

Module 2I003 Algorithmique Elémentaire


Définitions et exemple à un seul appel
La récursivité pas à pas
Terminaison et validité d’une fonction récursive
Terminaison et validité de la fonction factorielle
Recherche d’un élément dans un tableau non trié
p
Calcul de Cn

Plan du cours

1 Définitions et exemple à un seul appel

2 La récursivité pas à pas

3 Terminaison et validité d’une fonction récursive

4 Terminaison et validité de la fonction factorielle

5 Recherche d’un élément dans un tableau non trié

6 Calcul de Cnp
Définitions et exemple à un seul appel
La récursivité pas à pas
Terminaison et validité d’une fonction récursive
Terminaison et validité de la fonction factorielle
Recherche d’un élément dans un tableau non trié
p
Calcul de Cn

Définition
Definition
En mathématiques, une fonction récursive est une fonction qui
est définie à partir d’elle même.
En informatique, une fonction est récursive lorsqu’elle peut
s’appeler elle-même au cours de son exécution.
Définitions et exemple à un seul appel
La récursivité pas à pas
Terminaison et validité d’une fonction récursive
Terminaison et validité de la fonction factorielle
Recherche d’un élément dans un tableau non trié
p
Calcul de Cn

Exemple : la fonction factorielle (un seul appel)


1 si n = 0
∀n ∈ N, fact(n) =
n × fact(n − 1) sinon

def f a c t ( x ) :
i f x == 0 :
return 1
else :
r e t u r n x ∗ f a c t ( x−1)
Définitions et exemple à un seul appel
La récursivité pas à pas
Terminaison et validité d’une fonction récursive
Terminaison et validité de la fonction factorielle
Recherche d’un élément dans un tableau non trié
p
Calcul de Cn

Notion de Pile

Une Pile P est une structure de données gérée à l’aide des 3


méthodes suivantes :
1 [Link](d)
Place d en sommet de la pile P.
2 [Link]()
Dépile le sommet de la pile P et en renvoie la valeur.
3 [Link]()
Teste si la pile P est vide.
Définitions et exemple à un seul appel
La récursivité pas à pas
Terminaison et validité d’une fonction récursive
Terminaison et validité de la fonction factorielle
Recherche d’un élément dans un tableau non trié
p
Calcul de Cn

Contexte d’exécution d’une fonction


Pour pouvoir exécuter une fonction (récursive ou non), le code
d’exécution doit avoir accès aux valeurs des paramètres de la
fonction et des variables locales.
Que devient le contexte d’une fonction qui appelle une nouvelle
fonction ?

def g ( i n t a ) :
i =5
f ( i +2 , 8 )
...

g(3)
Définitions et exemple à un seul appel
La récursivité pas à pas
Terminaison et validité d’une fonction récursive
Terminaison et validité de la fonction factorielle
Recherche d’un élément dans un tableau non trié
p
Calcul de Cn

Pile des exécutions

1 A chaque appel de fonction, le contexte d’exécution de la


fonction appelée est empilé au sommet de la pile des
exécutions.
2 Quand on termine l’exécution d’une fonction, son contexte
d’exécution est dépilé de la pile des exécutions.
3 Le sommet de pile contient ainsi le contexte de la fonction
en cours d’exécution.
Définitions et exemple à un seul appel
La récursivité pas à pas
Terminaison et validité d’une fonction récursive
Terminaison et validité de la fonction factorielle
Recherche d’un élément dans un tableau non trié
p
Calcul de Cn

Exemple

A l'appel de f(i+2,8) :
f
{ 8
7
second paramètre de f
premier paramètre de f

g { 5
3
i
a

A la fin de f(i+2,8),
retour à g:
g { 5
3
i
a
Définitions et exemple à un seul appel
La récursivité pas à pas
Terminaison et validité d’une fonction récursive
Terminaison et validité de la fonction factorielle
Recherche d’un élément dans un tableau non trié
p
Calcul de Cn

Exemple de la factorielle

def f a c t ( n ) :
p r i n t " Appel de f a c t avec n = " , n
i f n==0 :
r e s =1
else :
r e s =n∗ f a c t ( n−1)
p r i n t " R e s u l t a t pour n = " , n , " : " , r e s
return res
Définitions et exemple à un seul appel
La récursivité pas à pas
Terminaison et validité d’une fonction récursive
Terminaison et validité de la fonction factorielle
Recherche d’un élément dans un tableau non trié
p
Calcul de Cn

Exemple de la factorielle (suite)

Appel de f a c t ( 4 )

Appel de fact avec n = 4


Appel de fact avec n = 3
Appel de fact avec n = 2
Appel de fact avec n = 1
Appel de fact avec n = 0
Resultat pour n = 0 : 1
Resultat pour n = 1 : 1
Resultat pour n = 2 : 2
Resultat pour n = 3 : 6
Resultat pour n = 4 : 24
Définitions et exemple à un seul appel
La récursivité pas à pas
Terminaison et validité d’une fonction récursive
Terminaison et validité de la fonction factorielle
Recherche d’un élément dans un tableau non trié
p
Calcul de Cn

Terminaison et validité d’une fonction récursive f (x)

Soit P l’ensemble des valeurs du paramètre x de f


Terminaison Démontrer par récurrence que ∀x ∈ P, f (x) se
termine.
Validité Démontrer par récurrence que ∀x ∈ P, f (x) est
valide.
On peut grouper les deux raisonnements.
Définitions et exemple à un seul appel
La récursivité pas à pas
Terminaison et validité d’une fonction récursive
Terminaison et validité de la fonction factorielle
Recherche d’un élément dans un tableau non trié
p
Calcul de Cn

Terminaison et validité de la fonction factorielle

Terminaison Montrer par récurrence sur n que ∀n ≥ 0, fact(n)


se termine.
Validité Montrer par récurrence sur n que ∀n ≥ 0, fact(n)
vaut n!.
Définitions et exemple à un seul appel
La récursivité pas à pas
Terminaison et validité d’une fonction récursive
Terminaison et validité de la fonction factorielle
Recherche d’un élément dans un tableau non trié
p
Calcul de Cn

Terminaison et validité de la fonction factorielle


P(k ), k ≥ 0: fact(k) se termine et retourne k !
Par récurrence faible :
Base Pour n = 0, fact(0) retourne 1 = 0!.
Donc P(0) est vérifiée.
Induction Supposons que P(k − 1) soit vérifiée pour une
valeur k ≥ 1 fixée. fact(k) retourne
k ×fact(k-1). Par hypothèse de récurrence,
fact(k-1) se termine et retourne (k − 1)!. Donc,
fact(k) se termine et retourne k × (k − 1)! = k !.
Donc P(k ) est vérifiée.
Conclusion Comme P(0) est vérifiée, et que, pour tout k ∈ N,
P(k ) ⇒ P(k + 1), on en déduit que ∀k ∈ N, P(k )
est vérifiée.
Définitions et exemple à un seul appel
La récursivité pas à pas
Terminaison et validité d’une fonction récursive
Terminaison et validité de la fonction factorielle
Recherche d’un élément dans un tableau non trié
p
Calcul de Cn

Recherche d’un élément dans un tableau non trié

def RechercheRec ( elem , tab , n ) :


i f n==0 :
r e t u r n −1
i f t a b [ n−1]==elem :
r e t u r n n−1
r e t u r n RechercheRec ( elem , tab , n−1)

>>> t a b = [ 4 , 8 , 3 , 1 , 9 , 8 , 7 ]
>>> RechercheRec ( 8 , tab , 7 )
5
>>> RechercheRec ( 5 , tab , 7 )
−1
Définitions et exemple à un seul appel
La récursivité pas à pas
Terminaison et validité d’une fonction récursive
Terminaison et validité de la fonction factorielle
Recherche d’un élément dans un tableau non trié
p
Calcul de Cn

Terminaison et validité de la fonction RechercheRec

Soit tab un tableau d’entiers de taille supérieure ou égale à n,


et elem un entier.
Terminaison Montrer par récurrence sur n que ∀n ≥ 0,
RechercheRec(elem, tab, n) se termine.
Validité Montrer par récurrence sur n que ∀n ≥ 0,
RechercheRec(elem, tab, n) renvoie
l’indice maximum i ∈ {0, · · · , n − 1} tel que
tab[i] = elem si elem ∈ tab[0 · · · n − 1],
−1 sinon
Définitions et exemple à un seul appel
La récursivité pas à pas
Terminaison et validité d’une fonction récursive
Terminaison et validité de la fonction factorielle
Recherche d’un élément dans un tableau non trié
p
Calcul de Cn

Combinaisons

Definition
Une combinaison d’ordre k d’un ensemble E à n éléments est
un sous-ensemble de E ayant k éléments.

Remarque : dans une combinaison, il n’y a pas de répétition et


l’ordre n’a pas d’importance.
Par exemple, dans l’ensemble {1, 2, 3, 4, 5} :
{2, 3, 5} est une combinaison d’ordre 3
{5, 2, 3} est la même combinaison
{5, 2, 5} n’est pas une combinaison.
Définitions et exemple à un seul appel
La récursivité pas à pas
Terminaison et validité d’une fonction récursive
Terminaison et validité de la fonction factorielle
Recherche d’un élément dans un tableau non trié
p
Calcul de Cn

Calcul du nombre de combinaisons

Theorem
Soit n ≥ 0 et k ∈ {0, . . . , n}.
Le nombre de combinaisons d’ordre k d’un ensemble E à n
n!
éléments est noté Cnk et vérifie Cnk = k !(n−k )! .

Par exemple il y a 10 combinaisons d’ordre 3 dans l’ensemble


{1, 2, 3, 4, 5}, autrement dit C53 = 10.
Définitions et exemple à un seul appel
La récursivité pas à pas
Terminaison et validité d’une fonction récursive
Terminaison et validité de la fonction factorielle
Recherche d’un élément dans un tableau non trié
p
Calcul de Cn

Triangle de Pascal

Theorem (Triangle de Pascal)


k −1
Cnk = Cn−1
k
+ Cn−1 pour 1 ≤ k ≤ n − 1

Ckn k=0 k=1 k=2 k=3 k=4 k=5


n=0 1
n=1 1 1
n=2 1 2 1
n=3 1 3 3 1
n=4 1 4 6 4 1
n=5 1 5 10 10 5 1
Définitions et exemple à un seul appel
La récursivité pas à pas
Terminaison et validité d’une fonction récursive
Terminaison et validité de la fonction factorielle
Recherche d’un élément dans un tableau non trié
p
Calcul de Cn

Calcul des Cnk pour n ≥ 0 et k ∈ {0, · · · , n}

def Comb( n , k ) :
i f ( k==n ) or ( k = = 0 ) :
return 1
r e t u r n Comb( n−1,k )+Comb( n−1,k −1)

>>> Comb( 5 , 5 )
1
>>> Comb( 4 , 2 )
6
>>> Comb( 5 , 3 )
10
Définitions et exemple à un seul appel
La récursivité pas à pas
Terminaison et validité d’une fonction récursive
Terminaison et validité de la fonction factorielle
Recherche d’un élément dans un tableau non trié
p
Calcul de Cn

Terminaison et validité de la fonction Comb

Terminaison Montrer par récurrence sur n que ∀n ≥ 0,


∀k ∈ {0, · · · , n}, Comb(n,k) se termine.
Validité Montrer par récurrence sur n que ∀n ≥ 0,
∀k ∈ {0, · · · , n}, Comb(n,k) retourne Cnk .
Définitions et exemple à un seul appel
La récursivité pas à pas
Terminaison et validité d’une fonction récursive
Terminaison et validité de la fonction factorielle
Recherche d’un élément dans un tableau non trié
p
Calcul de Cn

Exécutions de Comb

def Comb( n , k ) :
p r i n t ( ’ Appel avec n= ’ , n , ’ e t k= ’ , k )
if ( k==n ) or ( k = = 0 ) :
r e s =1
else :
r e s = Comb( n−1,k )+Comb( n−1,k −1)
p r i n t ( ’C( ’ , n , ’,’ , k , ’ )= ’ , r e s )
return res
Définitions et exemple à un seul appel
La récursivité pas à pas
Terminaison et validité d’une fonction récursive
Terminaison et validité de la fonction factorielle
Recherche d’un élément dans un tableau non trié
p
Calcul de Cn

Exécutions de Comb(3,2)

>>> Comb( 3 , 2 )
Appel avec n= 3 e t k= 2
Appel avec n= 2 e t k= 2
C( 2 , 2 )= 1
Appel avec n= 2 e t k= 1
Appel avec n= 1 e t k= 1
C( 1 , 1 )= 1
Appel avec n= 1 e t k= 0
C( 1 , 0 )= 1
C( 2 , 1 )= 2
C( 3 , 2 )= 3
3
Définitions et exemple à un seul appel
La récursivité pas à pas
Terminaison et validité d’une fonction récursive
Terminaison et validité de la fonction factorielle
Recherche d’un élément dans un tableau non trié
p
Calcul de Cn

Arbre des exécutions de Comb(3,2)

Comb(3,2)
3

Comb(2,2) Comb(2,1)
1 2

Comb(1,1) Comb(1,0)
1 1

Vous aimerez peut-être aussi