Академический Документы
Профессиональный Документы
Культура Документы
Rcursivit
Jean-Francis Roy
Dpartement dinformatique et de gnie logiciel
Universit Laval
Module 10
Rcursivit
Module 10
1 / 38
Rcursivit
Module 10
2 / 38
La rcursivit
Objectif
Sintroduire un concept fondamental en programmation, la
rcursivit, en solutionnant des problmes de manire rcursive, puis
en explorant certains problmes et certaines structures de donnes qui
sont dfinis rcursivement.
Rcursivit
Module 10
3 / 38
Plan
Rcursivit
Module 10
4 / 38
Introduction
Rcursivit
Module 10
5 / 38
Dfinition
Rcursivit
Module 10
6 / 38
Structure gnrale
def fonction (...):
# Vrification des conditions de convergence
i f ...:
r a i s e Exception (...)
# Vrification des conditions d'arrt
i f ...:
r e t u r n ...
# Appel (s) rcursif (s)
x = fonction (...)
# Retour
return x
Rcursivit
Module 10
7 / 38
Rcursivit
Module 10
8 / 38
Rcursivit
Module 10
9 / 38
Rcursivit
Module 10
10 / 38
Rcursivit
Module 10
11 / 38
Rcursivit
Module 10
12 / 38
Rcursivit
Module 10
13 / 38
Conditions darrt :
1
Rcursivit
Module 10
14 / 38
Rcursivit
Module 10
15 / 38
Rcursivit
Module 10
16 / 38
Rcursivit
Module 10
17 / 38
Rcursivit
Module 10
18 / 38
Rcursivit
Module 10
19 / 38
Rcursivit
Module 10
20 / 38
Rcursivit
Module 10
21 / 38
Plan
Rcursivit
Module 10
22 / 38
La suite de Fibonacci
La suite de Fibonacci est une suite de nombres trs tudie en
mathmatiques. Elle a t nomme en lhonneur de Leonardo Bonacci
(aussi connu sous plusieurs autres noms dont Leonardo Pisano).
Chaque terme de cette suite (sauf les deux premiers) sont obtenus en
additionnant les deux termes prcdents : 0, 1, 1, 2, 3, 5, 8, 13, ....
Rcursion : () = ( 1) + ( 2)
Conditions darrt : (0) = 0, (1) = 1
Convergence : Pour tout 2, nous faisons deux appels rcursifs avec
de plus petites valeurs de , jusqu ce que soit gal 0 ou 1. On a
donc convergence pour 0.
IFT-1004 - Introduction la programmation
Rcursivit
Module 10
23 / 38
La suite de Fibonacci
Rcursivit
Module 10
24 / 38
Rcursivit
Module 10
25 / 38
Rcursivit
Module 10
26 / 38
Rcursivit
Module 10
27 / 38
Rcursivit
Module 10
28 / 38
Plan
Rcursivit
Module 10
29 / 38
c l a s s Tata:
def __init__ ( s e l f , n):
s e l f .n = n
i f n != 0:
s e l f . suivant = Tata(n - 1)
else :
s e l f . suivant = None
Rcursivit
Module 10
30 / 38
12
99
37
8
3
1
6
4
10
14
7
Rcursivit
13
Module 10
31 / 38
c l a s s ListeChainee :
def __init__ ( s e l f ):
s e l f . noeud_courant = None
def inserer ( s e l f , donnee ):
nouveau_noeud = Noeud ( donnee )
nouveau_noeud . suivant = s e l f . noeud_courant
s e l f . noeud_courant = nouveau_noeud
Rcursivit
Module 10
32 / 38
12
99
37
lc = Listechainee ()
lc. inserer (37)
lc. inserer (99)
lc. inserer (12)
p r i n t (lc. noeud_courant . donnee )
p r i n t (lc. noeud_courant . suivant . donnee )
p r i n t (lc. noeud_courant . suivant . suivant . donnee )
Rcursivit
Module 10
33 / 38
c l a s s ArbreBinaireDeRecherche :
def __init__ ( s e l f ):
s e l f . racine = None
def inserer ( s e l f , donnee ):
s e l f . racine = s e l f . _inserer_recursif ( s e l f .racine ,
donnee )
[...]
Rcursivit
Module 10
34 / 38
Rcursivit
Module 10
35 / 38
La rcursivit en bref
La rcursion nest pas une panace (remde universel) : si on peut
aisment la remplacer par une boucle, il vaut mieux le faire
On peut lutiliser quand on a besoin dun gain en performance
possible grce une formulation rcursive habile
La rcursion permet galement de traiter des structures
arbitraires, ce qui est impossible avec des boucles imbriques, car
on ne peut pas prdire combien de boucles seront ncessaires
Supposons que lon veut rcursivement sommer les lments
dune liste de listes de listes, etc...
def somme (liste ):
resultat = 0
f o r element in liste :
i f i s i n s t a n c e (element , liste ):
resultat += somme(liste)
else :
resultat += element
IFT-1004 - Introduction la programmation
Rcursivit
Module 10
36 / 38
Plan
Rcursivit
Module 10
37 / 38
Aucune lecture
Travaux dirigs : Exercices sur la rcursivit
Rcursivit
Module 10
38 / 38