Récursivité
3 Récursivité et travail sur les chaînes de caractères. Exercice à rendre 1 4 Récursivité et opérations sur les entiers ... [1 3
Récursivité
Récursivité. Notions introduites Récursivité def somme(n): r = 0 for i in range(n + 1): ... somme(2) = 2 + somme(1) = 2 + 1 = 3.
Algorithmique Récursivité
Récursivité et Récurrence. Deux notions très proche : informatique : récursivité ... récursivité peut entraîner un débordement de pile (stack overflow).
05/06 - 2.2.3 Récursivité gauche
Une grammaire comportant au moins un symbole non terminal récursif gauche est dite récursive gauche. (Idem droite). La récursivité gauche pose divers probl`emes
La récursivité 1 Notions sur la récursivité
si il n'y a pas de condition d'arrêt la fonction boucle à l'infini
Programmation fonctionnelle Récursivité
03-Oct-2012 (1/3) x0 = 1 xn = x ? x(n?1). 11/29. La fonction puissance. (1/3) ... Récursivité double : plusieurs appels récursifs peuvent apparaˆ?tre.
Cours 1 Récursivité et tris
23-Jan-2013 Introduction à la récursivité ... Le tri à bulles. • Complexité des tris. Plan du cours 1 – Récursivité et tris ... 3 x 1 = 3.
Cours 1 Récursivité
15-Jan-2014 Exemple : 3 x 0 = 0. 3 x 1 = 3. 3 x 2 = 6. 3 x 3 = 9. 3 x 4 = 12. +3. +3. +3. Page 36. Un autre algorithme récursif. La multiplication. Si je ...
TD 2 - La récursivité - Master 1 Bio-informatique
Cette suite est la suite : (01
Récursivité
Une structure de données liée à la récursivité. D'autres exemples. Conclusion. Récursivité. Philippe Lac retourner : 1/3*(U(n-1)+2*V(n-1)).
Comprendre la récursivité en 7 min - Je suis un dev
somme(1)=1=1+0 somme(2)=3=2+1 somme(3)=6=3+3 somme(4)=10=4+6 Renvoie 6 Renvoie 3 Renvoie 1 Renvoie 0 Cas de base 1 3 Méthode de programmation d'une fonction récursive La programmation d'une fonction de façon récursive s'e ectue selon les étapes suivantes : 1 Déterminer les paramètres de la fonction comme on le ferait pour une fonction
Searches related to récursivité 1/3
Si n est positif : on appelle f avec la valeur n-1 • Chaine d’appels avec des valeurs entières strictement décroissantes de 1 en 1 • On arrive forcément à 0 • On affiche « Hello » • On remonte la pile des appels (sans rien faire ici la récursivité est terminale) 2013-2014 Algorithmique 16
Programmation fonctionnelle
Notes de cours
Cours 3bis
3 Octobre 2012
Sylvain Conchon
sylvain.conchon@lri.fr1/29R´ecursivit´e
2/29D´efinitions r´ecursives
Une fonction est
r ´ecursive s ielle fait app el` aelle m ˆemedans sa propre d´efinitionPar exemple, la fonction factoriellen! peut ˆetre d´efinie de mani`ere r´ecursive, pour tout entiern, par les deux ´equations suivantes0! = 1
n!= n×(n-1)!3/29Fonctions r´ecursives enOcaml
La d´efinition d"une fonction r´ecursive est introduite par l"adjonction du mot cl´erecau mot cl´elet let rec fact n = if n=0 then 1 else n * fact (n-1) 4/29Avantages des d´efinitions r´ecursives
L"´ecriture `a l"aide d"une fonction r´ecursive donne souvent un code plus lisible et plus susceptible d" ˆetre co rrect (ca rd"inva riantplus simple) que son ´equivalent imp´eratif utilisant une boucle int fact(int n){ int f = 1; int i = n; while (i>0){ f = f * i; i--; return f; l"argument justifiant la correction de cette version est nettement plus complexe que la version r´ecursive5/29Processus d"´evaluation
let rec fact n = if n=0 then 1 else n * fact (n-1)fact 33?= 0?3 *fact(3-1) 2?= 0?3 * 2 *fact(2-1) 1?= 0?3 * 2 * 1 *fact(1-1) 0 = 0?3 * 2 * 1 *1 ?3 * 2 * 1?3 * 2?66/29Processus d"´evaluation
let rec fact n = if n=0 then 1 else n * fact (n-1)fact 33?= 0?3 *fact(3-1) 2?= 0?3 * 2 *fact(2-1) 1?= 0?3 * 2 * 1 *fact(1-1) 0 = 0?3 * 2 * 1 *1 ?3 * 2 * 1?3 * 2?66/29Processus d"´evaluation
let rec fact n = if n=0 then 1 else n * fact (n-1)fact 33?= 0?3 *fact(3-1) 2?= 0?3 * 2 *fact(2-1) 1?= 0?3 * 2 * 1 *fact(1-1) 0 = 0?3 * 2 * 1 *1 ?3 * 2 * 1?3 * 2?66/29
Processus d"´evaluation
let rec fact n = if n=0 then 1 else n * fact (n-1)fact 33?= 0?3 *fact(3-1) 2?= 0?3 * 2 *fact(2-1) 1?= 0?3 * 2 * 1 *fact(1-1) 0 = 0?3 * 2 * 1 *1 ?3 * 2 * 1?3 * 2?66/29Processus d"´evaluation
let rec fact n = if n=0 then 1 else n * fact (n-1)fact 33?= 0?3 *fact(3-1) 2?= 0?3 * 2 *fact(2-1) 1?= 0?3 * 2 * 1 *fact(1-1) 0 = 0?3 * 2 * 1 *1 ?3 * 2 * 1?3 * 2?66/29Processus d"´evaluation
let rec fact n = if n=0 then 1 else n * fact (n-1)fact 33?= 0?3 *fact(3-1) 2?= 0?3 * 2 *fact(2-1) 1?= 0?3 * 2 * 1 *fact(1-1) 0 = 0?3 * 2 * 1 *1 ?3 * 2 * 1?3 * 2?66/29Processus d"´evaluation
let rec fact n = if n=0 then 1 else n * fact (n-1)fact 33?= 0?3 *fact(3-1) 2?= 0?3 * 2 *fact(2-1) 1?= 0?3 * 2 * 1 *fact(1-1) 0 = 0?3 * 2 * 1 *1 ?3 * 2 * 1?3 * 2?66/29
Processus d"´evaluation
let rec fact n = if n=0 then 1 else n * fact (n-1)fact 33?= 0?3 *fact(3-1) 2?= 0?3 * 2 *fact(2-1) 1?= 0?3 * 2 * 1 *fact(1-1) 0 = 0?3 * 2 * 1 *1 ?3 * 2 * 1?3 * 2?66/29Que se passe-t-il sinest n´egatif?
1.n!est d´efinie surN
2. la fonction facta pour typeint→intetne termine pas sison param`etre est n´egatifQuellevaleur factpeut-elle rendre sin<0?La seule solution raisonnable est destopperle calcul en cours et
d"expliquerle probl`eme `a l"utilisateur On utilise pour cela la fonction pr´ed´efiniefailwithmqui termine un programme en affichant le messagem`a l"´ecran7/29Que se passe-t-il sinest n´egatif?1.n!est d´efinie surN
2. la fonction facta pour typeint→intetne termine pas sison param`etre est n´egatifQuellevaleur factpeut-elle rendre sin<0?La seule solution raisonnable est destopperle calcul en cours et
d"expliquerle probl`eme `a l"utilisateur On utilise pour cela la fonction pr´ed´efiniefailwithmqui termine un programme en affichant le messagem`a l"´ecran7/29Que se passe-t-il sinest n´egatif?1.n!est d´efinie surN
2. la fonction facta pour typeint→intetne termine pas sison param`etre est n´egatifQuellevaleur factpeut-elle rendre sin<0?La seule solution raisonnable est destopperle calcul en cours et
d"expliquerle probl`eme `a l"utilisateur On utilise pour cela la fonction pr´ed´efiniefailwithmqui termine un programme en affichant le messagem`a l"´ecran7/29Fonctionfact(deuxi`eme version)
let rec fact n = if n<0 then failwith "argument negatif" elseif n=0 then 1 else n * fact (n-1)Encore mieux, une fonction interm´ediaire pour ´eviter des tests
inutiles let rec factorielle n = if n=0 then 1 else n * factorielle (n-1) let fact n = if n<0 then failwith "argument negatif" else factorielle n8/29Fonctionfact(deuxi`eme version)
let rec fact n = if n<0 then failwith "argument negatif" elseif n=0 then 1 else n * fact (n-1)Encore mieux, une fonction interm´ediaire pour ´eviter des tests
inutiles let rec factorielle n = if n=0 then 1 else n * factorielle (n-1) let fact n = if n<0 then failwith "argument negatif" else factorielle n8/29Fonctionfact(troisi`eme version)
On peut cacher la fonction "incorrecte" comme une fonction locale let fact n = let rec factorielle n = if n=0 then 1 else n * factorielle (n-1) in if n<0 then failwith "argument negatif" else factorielle n9/29D´efinitions par cas
Analyse par cas d"une valeur avec la constructionmatch-with let rec fact n = match n with0 -> 1
| _ -> n * fact (n-1) Ceci permet de se rapprocher encore plus de la d´efinition math´ematique 10/29La fonctionpuissance(1/3)
x 0= 1 x n=x?x(n-1)let rec puissance x n = match n with0 -> 1
| _ -> x * puissance x (n-1)11/29La fonctionpuissance(1/3)
x 0= 1 x n=x?x(n-1)let rec puissance x n = match n with0 -> 1
| _ -> x * puissance x (n-1)11/29La fonctionpuissance(2/3)
Une version plus rapide qui exploite la parit´e den x 0= 1 x2n=xn?xn
x2n+1=x?xn?xnlet rec puissance x n =
match n with0 -> 1
| 1 -> x | _ -> let e = puissance x (n/2) in if n mod 2 = 0 then e*e else x * e * e12/29La fonctionpuissance(2/3)
Une version plus rapide qui exploite la parit´e den x 0= 1 x2n=xn?xn
x2n+1=x?xn?xnlet rec puissance x n =
match n with0 -> 1
| 1 -> x | _ -> let e = puissance x (n/2) in if n mod 2 = 0 then e*e else x * e * e 12/29La fonctionpuissance(3/3)
Encore une fois, pour ´eviter de boucler sur un argumentnn´egatif, on utilise une fonction "englobante" let puissance x n = let rec puissance n = match n with0 -> 1
| 1 -> x | _ -> let e = puissance (n/2) in if n mod 2 = 0 then e*e else x * e * e in if n<0 then failwith "argument n´egatif" else puissance n13/29´
Evaluation de la fonctionpuissance
puissance 4 5?let e = puissance 4 2 in 4 * e *e ?let e = (let e"= puissance 4 1 in e"*e") in 4 * e * e ?let e = (let e"= 4 in e"*e") in 4 * e * e ?let e = 4 * 4 in 4 * e * e ?let e = 16 in 4 * e * e ?4 * 16 * 16 ?102414/29´
Evaluation de la fonctionpuissance
puissance 4 5?let e = puissance 4 2 in 4 * e *e ?let e = (let e"= puissance 4 1 in e"*e") in 4 * e * e ?let e = (let e"= 4 in e"*e") in 4 * e * e ?let e = 4 * 4 in 4 * e * e ?let e = 16 in 4 * e * e ?4 * 16 * 16 ?102414/29´
Evaluation de la fonctionpuissance
puissance 4 5?let e = puissance 4 2 in 4 * e *e ?let e = (let e"= puissance 4 1 in e"*e") in 4 * e * e ?let e = (let e"= 4 in e"*e") in 4 * e * e ?let e = 4 * 4 in 4 * e * e ?let e = 16 in 4 * e * e ?4 * 16 * 16 ?1024 14/29Evaluation de la fonctionpuissance
puissance 4 5?let e = puissance 4 2 in 4 * e *e ?let e = (let e"= puissance 4 1 in e"*e") in 4 * e * e ?let e = (let e"= 4 in e"*e") in 4 * e * e ?let e = 4 * 4 in 4 * e * e ?let e = 16 in 4 * e * e ?4 * 16 * 16 ?102414/29´
Evaluation de la fonctionpuissance
puissance 4 5?let e = puissance 4 2 in 4 * e *e ?let e = (let e"= puissance 4 1 in e"*e") in 4 * e * e ?let e = (let e"= 4 in e"*e") in 4 * e * e ?let e = 4 * 4 in 4 * e * e ?let e = 16 in 4 * e * e ?4 * 16 * 16 ?102414/29´
Evaluation de la fonctionpuissance
puissance 4 5?let e = puissance 4 2 in 4 * e *e ?let e = (let e"= puissance 4 1 in e"*e") in 4 * e * e ?let e = (let e"= 4 in e"*e") in 4 * e * e ?let e = 4 * 4 in 4 * e * e ?let e = 16 in 4 * e * e ?4 * 16 * 16 ?102414/29´
Evaluation de la fonctionpuissance
puissance 4 5?let e = puissance 4 2 in 4 * e *e ?let e = (let e"= puissance 4 1 in e"*e") in 4 * e * e ?let e = (let e"= 4 in e"*e") in 4 * e * e ?let e = 4 * 4 in 4 * e * e ?let e = 16 in 4 * e * e ?4 * 16 * 16 ?1024 14/29Evaluation de la fonctionpuissance
puissance 4 5?let e = puissance 4 2 in 4 * e *e ?let e = (let e"= puissance 4 1 in e"*e") in 4 * e * e ?let e = (let e"= 4 in e"*e") in 4 * e * e ?let e = 4 * 4 in 4 * e * e ?let e = 16 in 4 * e * e ?4 * 16 * 16 ?102414/29Ensemble de Cantor
D´efinir une fonction Cantor qui ´etant donn´e un entiernd´ecide si, dans l"´ecriture en base 3 (´ecriture qui utilise les chiffres 0, 1 et 2), ns"´ecrit en utilisant uniquement des 0 et des 1let rec cantor n = match n with0 -> true
| _ -> if n mod 3 = 2 then false else cantor (n / 3)ou plus simplement let rec cantor n = (n=0) || (n mod 3 <>2 && cantor (n/3))15/29Ensemble de Cantor
D´efinir une fonction Cantor qui ´etant donn´e un entiernd´ecide si, dans l"´ecriture en base 3 (´ecriture qui utilise les chiffres 0, 1 et 2), ns"´ecrit en utilisant uniquement des 0 et des 1let rec cantor n = match n with0 -> true
| _ -> if n mod 3 = 2 then false else cantor (n / 3)ou plus simplement let rec cantor n = (n=0) || (n mod 3 <>2 && cantor (n/3))15/29Ensemble de Cantor
D´efinir une fonction Cantor qui ´etant donn´e un entiernd´ecide si, dans l"´ecriture en base 3 (´ecriture qui utilise les chiffres 0, 1 et 2), ns"´ecrit en utilisant uniquement des 0 et des 1let rec cantor n = match n with0 -> true
| _ -> if n mod 3 = 2 then false else cantor (n / 3)ou plus simplement let rec cantor n = (n=0) || (n mod 3 <>2 && cantor (n/3)) 15/29R´ecursivit´e double
R´ecursivit´e double :
plusieurs app elsr ´ecursifsp euventappa raˆıtre dans la d´efinitionlet rec fibonacci n = match n with0 -> 0
| 1 -> 1 | _ -> fibonacci (n-1) + fibonacci (n-2)16/29R´ecursivit´e double
R´ecursivit´e double :
plusieurs app elsr ´ecursifsp euventappa raˆıtre dans la d´efinitionlet rec fibonacci n = match n with0 -> 0
| 1 -> 1 | _ -> fibonacci (n-1) + fibonacci (n-2)16/29R´ecursivit´e mutuelle (1/2)
R´ecursivit´e mutuelle :
Une fon ctionfpeut faire r´ef´erence `a une
fonctiongqui elle-mˆeme fait r´ef´erence `af pair.ml let rec pair n = (n = 0) || impair (n-1) let rec impair n = (n <> 0) && pair (n-1)compilation > ocamlc -o pair pair.mlFile "pair.ml", line 1, characters 28-34:
Unbound value impair
17/29R´ecursivit´e mutuelle (1/2)
R´ecursivit´e mutuelle :
Une fon ctionfpeut faire r´ef´erence `a une
fonctiongqui elle-mˆeme fait r´ef´erence `af pair.ml let rec pair n = (n = 0) || impair (n-1) let rec impair n = (n <> 0) && pair (n-1)compilation > ocamlc -o pair pair.mlFile "pair.ml", line 1, characters 28-34:
Unbound value impair
17/29R´ecursivit´e mutuelle (2/2)
Pour d´efinir deux fonctionsfetgmutuellement r´ecursives on utilise la construction let rec f = e1 and g = e2 pair.ml let rec pair n = (n = 0) || impair (n-1) and impair n = (n <> 0) && pair (n-1)18/29Principes d"une d´efinition r´ecursive
L"analyse par cas dans une d´efinition r´ecursive permet de regrouper les cas de base non r´ecursifs les cas r ´ecursifs qui renvoient ` ala d ´efinitionen cours La d´efinition d"une fonction r´ecursive revient toujours ` aidentifierces diff´erents cas puis `a v´erifier que :1.Les cas r ´ecursifsfinissent pa rrenvo yeraux cas de base (afin
de garantir la terminaison de la fonction)2.T ousles cas sont couverts dans la d ´efinition 3. On ne risque pas de b ouclersur des cas r ´ecursifs,en s"assurant par exemple que chaque appel r´ecursif renvoie `a un casplus simple19/29Principes d"une d´efinition r´ecursive L"analyse par cas dans une d´efinition r´ecursive permet de regrouper les cas de base non r´ecursifs les cas r ´ecursifs qui renvoient ` ala d ´efinitionen cours La d´efinition d"une fonction r´ecursive revient toujours ` aidentifierces diff´erents cas puis `a v´erifier que :1.Les cas r ´ecursifsfinissent pa rrenvo yeraux cas de base (afin
de garantir la terminaison de la fonction)2.T ousles cas sont couverts dans la d ´efinition 3. On ne risque pas de b ouclersur des cas r ´ecursifs,en s"assurant par exemple que chaque appel r´ecursif renvoie `a un casplus simple19/29Principes d"une d´efinition r´ecursive L"analyse par cas dans une d´efinition r´ecursive permet de regrouper les cas de base non r´ecursifs les cas r ´ecursifs qui renvoient ` ala d ´efinitionen cours La d´efinition d"une fonction r´ecursive revient toujours ` aidentifierces diff´erents cas puis `a v´erifier que :1.Les cas r ´ecursifsfinissent pa rrenvo yeraux cas de base (afin
de garantir la terminaison de la fonction)2.T ousles cas sont couverts dans la d ´efinition 3. On ne risque pas de b ouclersur des cas r ´ecursifs,en s"assurant par exemple que chaque appel r´ecursif renvoie `a un casplus simple19/29Principes d"une d´efinition r´ecursive
L"analyse par cas dans une d´efinition r´ecursive permet de regrouper les cas de base non r´ecursifs les cas r ´ecursifs qui renvoient ` ala d ´efinitionen cours La d´efinition d"une fonction r´ecursive revient toujours ` aidentifierces diff´erents cas puis `a v´erifier que :1.Les cas r ´ecursifsfinissent pa rrenvo yeraux cas de base (afin
de garantir la terminaison de la fonction)2.T ousles cas sont couverts dans la d ´efinition 3. On ne risque pas de b ouclersur des cas r ´ecursifs,en s"assurant par exemple que chaque appel r´ecursif renvoie `a un casplus simple19/29Exemples de mauvaises d´efinitions r´ecursivesProbl`eme de
terminaison : les cas r ´ecursifsne renvoient pas aux cas de base let rec fibonacci n = match n with0 -> 0
| _ -> fibonacci (n-1) + fibonacci (n-2)Probl`eme decouverture des cas p ossibles let mystere x = let rec mystere x n = match n with0 -> 1
| 1 -> x * mystere (x/2) ((x mod 2)+n) in if x<=0 then 1 else mystere x 120/29Exemples de mauvaises d´efinitions r´ecursives
Probl`eme de
terminaison : les cas r ´ecursifsne renvoient pas aux cas de base let rec fibonacci n = match n with0 -> 0
| _ -> fibonacci (n-1) + fibonacci (n-2)Probl`eme decouverture des cas p ossibles let mystere x = let rec mystere x n = match n with0 -> 1
| 1 -> x * mystere (x/2) ((x mod 2)+n) in if x<=0 then 1 else mystere x 120/29R´ecursion infinie
Il arrive cependant parfois de vouloir ´ecrire de "mauvaises" d´efinitions r´ecursives Soit la fonctionzeroqui recherche (´eventuellement ind´efiniment) une valeur pour laquelle une fonctionfs"annule let zero f = let rec recherche i = if f i = 0 then i else recherche (i+1) in recherche 0 21/29quotesdbs_dbs22.pdfusesText_28
[PDF] Bases d 'algorithmique
[PDF] COURS ALGORITHMIQUE ET PROGRAMMATION INFORMATIQUE
[PDF] FICHE n°6 : PROGRAMMER DES BOUCLES - Maths-et-tiques
[PDF] fiche maternelle algorithme imprimer- pdf documents
[PDF] Fiche enseignant ALGORITHMES NIVEAU : GRANDE SECTION
[PDF] Algorithme et numération - Académie de Nancy-Metz
[PDF] L 'atelier des petites chenilles en PS Etape 1 - académie de Caen
[PDF] reproduire une suite algorithmique - Accueil DSDEN 22
[PDF] Rappels : Tableaux et Matrices
[PDF] N°96 - spécial mouvement intra 2016pub - Snes
[PDF] Algorithmique et programmation : les bases (Algo) Corrigé
[PDF] TP7 : le théor`eme du point fixe en action sous MATLAB
[PDF] Séance de travaux pratiques n° 1
[PDF] simulations, algorithmes en probabilités et statistique(s) au - Apmep