6
•ommaire Introduction « Objets récursifs Méthodes récursives Divide & Conquer Principe d'exécution Arbre d'exécution Preuve de terminaison © L. H. Riundbane; FSM.TN BJETS RECURSIFS (1) II est parfois difficile de définir un objet directement II est plus simple de définir cet objet en fonction de lui-même Exemple - chaîne de caractères a) Classique : Une chaîne de caractères est une suite de caractères b) Récursive : Une chaîne de caractères est soit la chaîne vide; soit un caractère suivi d'une chaîne de caractère 6 L. B. Romdhane; FSM.TN © L. B. Romdhane, Ph.D. DSI / FSM / UM / Tunisie John McCarthy (MIT / Stanford) Algolôo ( ancêtre de Pascal, PL/1 et C) Lisp : structures de données et traitements récursifs Implémentation en langage de programmation • au début : certains n'implémentait pas ce concept (COBOL, Fortran) actuellement : tous les langages * Objets (structures de données) récursives * Méthodes (procédures et fonctions) récursives L. B.Romdhanc; FSM.TN

Ch2 Algorthmique Avancée - Récursivité

Embed Size (px)

Citation preview

Page 1: Ch2 Algorthmique Avancée - Récursivité

•ommaire• Introduction« Objets récursifs• Méthodes récursives

• Divide & Conquer

• Principe d'exécution

• Arbre d'exécution

• Preuve de terminaison

© L. H. Riundbane; FSM.TN

BJETS RECURSIFS (1)II est parfois difficile de définir un objet directement

II est plus simple de définir cet objet en fonctionde lui-mêmeExemple - chaîne de caractères

a) Classique : Une chaîne de caractères est une suite decaractères

b) Récursive : Une chaîne de caractères est soit la chaînevide; soit un caractère suivi d'une chaîne de caractère

6 L. B. Romdhane; FSM.TN

© L. B. Romdhane, Ph.D.

DSI / FSM / UM / Tunisie

• John McCarthy (MIT / Stanford)

• Algolôo ( ancêtre de Pascal, PL/1 et C)

• Lisp : structures de données et traitements récursifs

• Implémentation en langage de programmation

• au début : certains n'implémentait pas ce concept(COBOL, Fortran)

• actuellement : tous les langages

* Objets (structures de données) récursives* Méthodes (procédures et fonctions) récursives

L. B.Romdhanc; FSM.TN

Page 2: Ch2 Algorthmique Avancée - Récursivité

OBJETS RECURSIFS (2)• Objet récursif: le nombre de composantess (objets) est

illimité ?

• La nécessité d'un point d'appui

• un objet particulier permettant de limiter le nombre

d'objets dans la définition

• Objet récursif :

• soit un objet particulier;

• soit une composante + un objet récursif

> L. B. Runidliane; FSM.TN

-T5ÎVÎDE & CONQUER'{2)1. Diviser : si la taille du problème est inférieur à un

certain seuil, alors le résoudre directement en allant

chercher parmi un ensemble de cas particuliers sinon

le diviser en un ensemble de sous-problèmes

2. Régner : Résoudre récursivement les sous-

problèmes selon le même principe

3. Combiner : les solutions des sous-problèmes pour

constituer la solution du problème original

ASI) i !.. B, Rumdhane; FSM.TN

-T5MDE&CONQUER(1)0 Diviser pour régner : un p r i n c i p e l n n d . u n r n i . i l p n n r

résoudre des problèmes informatiques COmplexei

• Idée- résoudre un problème S(n) de / < / ! / / < • u m Irdivisant en plusieurs sous-problèmes de même n . i i n i vS(n}, S(n-), ..., S(nk) telque(n,< n); V\\s e o m l u n nles solutions pour obtenir celle de S(n)

• La notion de taille dépend de la nature du prob lème !• Tri : le nombre d'éléments à trier• Factoriel : la valeur de l'entier

• Constitue le principe fondamental de la récursivité

I L. B. Romdhane; FSM.TN

"tfJVÎDE & CONQÛÏRlITAlgorithme Solve (I)

Débutn<- taille(I)

Si (n < seuil) alors solution <- directlySolve(I)

Sinon« diviser / en It, I 2 , ..., Ik

• Pour i de i à k faireS,<-Salvf:(I}

Fin Pour• Solution <— combiner^,,..., Sk )

Fin Si

Fin.

© L. B. Rumiihani-i FSM.TN

Page 3: Ch2 Algorthmique Avancée - Récursivité

'MÉTHODES RECURSÎVES (1)j\ Une méthode est dite récursive, si elle fait appel à

elle-mêmeMéthode myRecursMethod ( ListeParam )

Environment

Début:

myRecursMethod ( ListeParam)

Fin.

« Nécessité d'une condition d'arrêt qui sera vraie à uninstant ultérieur de l'exécution

«5 L. M. Ruiiiiilitinc; KSM.TN

-METHODES RECURSIVES (3)• Environnement d'une méthode contient les

informations suivantes :• variables locales & paramètres de la méthode

• variables locales du compilateur

• @ de retour dans la méthode appelante; etc.

• Les appels à une méthode sont stockés dans une piled'exécution (frame stack)• Empiler un nouveau environnement par appel récursif

• Dépiler si la méthode s'est terminée

AS1> iO L. B, Roruiihane; FSM.TN

La suite de Fibonacci fonction fibo ( In n : entier)entier

• Un = U^ + Un.z VAR

fi, fa, f : entierDébut

• Ui = i; Uo = o

, . 1 Si ((n = o) OU (n=i))directlySolve(n) : .............,.,,,.„„_ a!ors f <_ n

1. Diviser2. Régner

3. Composer j"

sinonfi (— fibo (n -i)h <— fibo (n -2)

Fin Siretourner (f )Fin.

L. B. Romdliane; FSM.TN

Algorithme CalcFib

VAR X : entier

Début

X <- fibo (3)Fin.fonction ilbo( in n : entier) : entier

VAR fl, G, f: entier

Début

1. Si (n = 0)OU(n=l)

2. ulvrs f <— n

3. sîiiun

4. f 1 <- fibo (n -1)

5. f2 «- fibo (n -2)

6. f*- f l+f2

FiiiSi

7. retourner (f)

Fin.

RCrjRST\7fs4)? : "valeur indéfinie"

11:3

AS!) ) L. B. Romilhane; FSM.TN

fibo

f z : ?@ : ligne imainx : ?

fibon : 2fi:?

fi:?

@ : ligne i, 4fibon:3

£2:?fi;?f:?

main

Page 4: Ch2 Algorthmique Avancée - Récursivité

-^IViETHODES RECURSIVESfibo <dn :i

f a : ?

fi:?

f : ?

@ : ligne i

fibon :a

f a : ?

fi: ?

f :?@ : ligne 4fibon:3

f a : ?

fi: ?

f :?

@ : ligne 4main

x:?

D fibo <jn : i

f z : ?

fi:?

f :i

@ : ligne 2

fibo

n : 2f a : ?

fi:?f : ?

@ : ligne 4fibo11:3£2: ?

fi:?f :?

@ : ligne 4

mainx : ?

fibo <jn : i

fa : ?

fi: ?

f : i@ : ligne 7

fibo

n :2

fa :?

fi:?f : ?

@ : ligne 4fibon:3

f a : ?

fi : ?

f : ?

@ : ligne 4mainx : ?

fibo <;

n : 2fa : ?

fi: if : ?

@ : ligne 5fibon: 3

fa : ?

fi : ?

f : ?

(!$ : ligne 4niai n

x : ?

fibo <fn : o

fa :?

fi:?

f : ?

@ : ligne ifibon ; 2

f a : ?

finf : ?

@ : ligne 5fibo11:3f a : ?

fi:?f :?

@ : ligne 4

main

x: ?

i L. B. Roimihanc; FSM.TN

-IViÉTHODES RECURSWËS (7)

fibo Cn : if z : ?

fi:?

f

@ : ligne

i

2,7

fibon:3

f a : ?

fi : i

f : ?

@ : ligne 5main

x : ?

fibon: 3

f a : i

Mfi: if : a

@ : ligne 6, 7main

x: ?

3 (^

mam <

x: .

L. B. Romdhane; ESM.TN

-"-IVTÉTHODES RECURSIVES(6)fibo Cqn : o

fa:?fi;?

f : o

@ : ligne 2

fibon : 2

h: ?fi :if : ?

@ : ligne gfibon:3

fa : ?

f i :?f : ?

@ : ligne 4mainx : ?

^ fibo <^n : o

f a : ?fi:?

f : o

@ : ligne 7

fibon : 2f a : ?

fi:i

f :?@ : ligne 5fibo

n:3

f a : ?fi:?f : ?

@ : ligne 4main

x : ?

u

fibo A\J-

n : 2

fa :ofi:i

f :i@ : ligne 6, 7fibon:3

fa :?fi: ?f :?

@ : ligne 4main

x : ?

fibo

11:3fa : ?

£fi:if : ?

@ : ligne 5main

x: ?

^

fibo ç

n:i f i :?fz : ? f : ?@ : ligne ifibon:3 fi:ifa : ? f : ?

@ : ligne 5main

x: ?

L. B. Romdliane; FSM.TN

DE RECURSIVITË (1)• On distingue les types de récursivité suivants• Linéaire

• une méthode s'auto-appelle une seule fois• factoriel, puissance

• Binaire• une méthode s'auto-appelle une seule fois

• fibonacci

• Multiple• une méthode s'auto-appelle plus que deux fois

© L. B. Romdhane; FSM.TN

Page 5: Ch2 Algorthmique Avancée - Récursivité

"TYPES DE RECURSIVITE (2)Factoriel (n) Puissance (x, n)

fonction factoriel(n : entier) :entierVAR f : entier

Débutsi (n=o) alors f f- o

sinon f <-- n * factoriel (n-i)

fin Si

retourner (f )Fin.

~Joncnôn pulssahcefx: réel, n : entier) :réel

VAR r : r ée lDébut

ïi (n=o) alors r «— ii'inon

MOD 2.) -o alors*— pul6fiance(Xj n DIV z)<— r * r

pulsuncefo (n -0 DIV 2)- K * r * r

fin Sifin Si

retourner (r)lin.

10 L. U. Kuimiliiuic; KSM.1N

A chaque nœud de l'arbre, on représente l'ensembledes paramètres de l'appel récursif, la taille du problème,

etc.

La racine est constitué du premier appel à la méthode

Chaque appel récursif est représenté dans un nœud filsdu nœud où l'appel a été engendré

Les nœuds terminaux (ou feuilles) n'engendrent aucun

appel récursif• Ils représentent les cas de base (où la taille du problème

est inférieur au seuil critique)

ASD © L. B. Romdhane ; (SM.TN

DE LA RECURSIVITE (1)A\ L'exécution d'une méthode récursive peut êtPe

modélisée à l'aide d'un arbre• un ensemble de nœuds; et de liens (parent / fils)

• et une racine

• Utilité ?

1. une meilleure compréhension du déroulement

2. un outil formel pour analyser le coût d'exécutiond'une méthode récursive

© L. B. Romdhane; FSM.TN

DE LA RECURSIVITE (3)

C L, B. Romdhime; FSM.TN

Page 6: Ch2 Algorthmique Avancée - Récursivité

"ARBRE DE LA REÇURSIVITE (4)• Une fois construit, cet arbre fournit un outil

mathématique pour analyser le coût d'exécution d'uneméthode récursive

• Calculer le coût à chaque appel; puis sommer sur tousles nœuds de l'arbre

• coût total est fonction• du nombre de nœuds (nombre d'appels)• Le coût à chaque nœud (appel)

O !.. H. K dhane; KSM.TM

ARBRE DE LA RECURSIVITE (5)

• coût: nombred'opérations d'ajjlftkm &d'affectation• coût total = 9

• Quel serait le coût pourfibo (n) d'une manièregénérale ?

fibo (3) 13]

fibo-U) j 3 j fibo (i) j

2 >

G L. B. Romdhane; FSM.TN

"DISCUSSION -TERMINAISON• Une méthode récursive finit-elle toujours par s'arrêter

lorsqu'elle est exécutée sur un jeu de données biendéterminée ?

» Un problème non-décidable !8 Aucune preuve formelle

• Généralement, on fait appel au « bon sens »• vérifier que la taille du sous-problème est inférieur à la

taille du problème original avant l'appel récursif> vérifier les conditions d'exécution avant de lancer l'appel

récursif

O L. B. Rimidhane; VSM.TN

L'exactitude d'une méthode récursive est faitegénéralement par induction ^ -~ —""•-

Soit P(n) une proposition dont on veut démontrerl'exactitude

Démontrer que P(n) est vraie Vne W] où 14/estunensemble de cas de base connus

Exprimer P(n) en fonction de P(n), ..,, P(nk); où n( < n

Supposer que P(n),..., P(nk); sont vraies; et

Démontrer que P(n) est vraie

© L. B. Roindhane; FSM.TN