Algorithmique Récursivité
On appelle récursive toute fonction ou procédure qui s'appelle elle même. Algorithme Fact. Entrée : un entier positif N. Sortie : factorielle de N.
Fonctions récursives (5.1)
IFT2810 A2009
Cours 2 : La récursivité
Comment programmer une fonction récursive ? Quels sont les pièges à éviter ? 2013-2014. Algorithmique. 9. Page
Programmation fonctionnelle Récursivité
3 oct. 2012 Fonctions récursives en Ocaml. La définition d'une fonction récursive est introduite par l'adjonction du mot clé rec au mot clé let.
Fonctions récursives - Lycée Pierre Corneille
En informatique une fonction f est récursive lorsque la définition de f utilise des valeurs de f. Lycée Pierre Corneille MP. Fonctions récursives
Programmation récursive —
21 mars 2019 Pour la structure liste les fonctions de manipulation (ou ... On peut suivre les différents appels d'une fonction récursive grâce `a la ...
La récursivité Lalgorithme dEuclide Implémentation en Python
La fonction factorielle est de complexité O(n). 14 / 29. La pile d'exécution : le cas factoriel. A chaque appel récursif de la
Récursivité
4 oct. 2017 1.1 Fonction factorielle . ... 2.2 Fonctions et procédures récursives . ... La fonction factorielle fac peut être définie ainsi :.
Récursivité
programmation avec fonctions récursives. • arbre d'appels L'intérêt de cette définition récursive de la fonction somme(n) est qu'elle.
cours 2:Complexité des algorithmes récursifs
Exemple: La fonction d'Ackermann. 10. Algorithmes récursifs. Calcul de complexité. ?. La complexité d'un algorithme récursif se fait par la résolution d'
[PDF] Algorithmique Récursivité
Moyen simple et élégant de résoudre certain problème Définition On appelle récursive toute fonction ou procédure qui s'appelle elle même Algorithme Fact
[PDF] Cours 2 : La récursivité
?Tout objet est dit récursif s'il se définit à partir de lui-même ?Ainsi une fonction est dite récursive si elle comporte dans son corps au moins un
[PDF] Fonctions récursives (51) - Université de Montréal
Pour définir une fonction récursive qui inverse les éléments d'une liste il est plus facile de définir une méthode InverseListe(Aij) qui prend en entrée
[PDF] Cours No 4 : Fonctions Récursives - LIRMM
– En informatique une fonction récursive est une fonction réalisant un calcul par récurrence Exemple : une fonction récursive écrite en Scheme calculant la
[PDF] Fonctions récursives - Lycée Pierre Corneille de Rouen
En informatique une fonction f est récursive lorsque la définition de f utilise des valeurs de f Lycée Pierre Corneille MP Fonctions récursives
[PDF] La théorie des fonctions récursives et ses applications - Numdam
Les fonctions récursives constituent une classe particulière de fonctions dont les variables (en nombre fini quelconque) et les valeurs sont des entiers
[PDF] Algorithmes et programmation II : La récursivité - LIP6
Une fonction récursive est une fonction qui s'appelle elle-même S Baarir (Paris10/LIP6) Cas général : la fonction est appelée récursivement et le
[PDF] LIFAP2 : ALGORITHMIQUE ET PROGRAMMATION RECURSIVE
minimum est ici une fonction le mot retourne permet de dire quel est son résultat ? minimum est l'appel récursif ? En programmation fonctionnelle
[PDF] Séance 5 : Fonctions récursives et machine de Turing
Fonctions primitives récursives - Fonctions récursives partielles et récursives - Machines de Turing - Equivalence de deux modèles de calcul
[PDF] Récursivité
Le document présente des exemples de fonctions définies de façon récursive – L'objectif est de comprendre la programmation récursive de quelques fonctions
La récursivité
Lycée Blaise Pascal
Octobre 2015
1/29L"algorithme d"Euclide
Extrait d"un cours de TS :Proposition
Soientaetbdeux entiers naturels non nuls et soitrle reste dans la division euclidienne deaparb. On a : PGCD(a;b) =PGCD(b;r).UmmagummaMise en abyme ou récursivité?
4/292/29Implémentation en Python
Puisque le PGCD deaet debet le PGCD est le reste debet du resterdans la division euclidienne deaparb:defp gcd(a,b): return p gcd(b,a%b)3/29Ummagumma
Mise en abyme ou récursivité?
4/29Implémentation en Python
On obtient :>>>pgcd(1768,1001)
ZeroDivisionError: integer division
o r m odulob y zero ... puisque pour calculer PGCD(1768,1001), il faut calculer PGCD(1001,767) et pour cela calculer PGCD(767,234) et pour cela calculer PGCD(26,13) et pour cela calculer PGCD(13,0) et pour cela calculer le reste dans une division euclidienne par 0.5/29Inclure un test d"arrêt
On arrête le processus lorsqueb=0 :defp gcd(a,b): if b = =0 : return a else return p gcd(b,a%b) donne comme espéré : >>>pgcd(1768,1001) 136/29Une suite récurrente
Soit(un)la suite définie surNpar :
?u0=1 u n=n×un-1pourn>0 Cette suite s"implémente naturellement par :deff actorielle(n): if n = =0 : return 1 else return n *factorielle(n-1)7/29La fonction factorielle
La fonctionfactorielle()donne :>>>factorielle(120) ou bien (après un long moment d"attente) : >>>factorielle(-2)RuntimeError: maximum recursion depth exceeded
in c omparison 8/29La fonction factorielle
Nous améliorons la fonctionfactorielle():deff actorielle(n): assert n >= 0, n d oit tre p ositif if n = =0 : return 1 else return n *factorielle(n-1) >>>>>>factorielle(-2)AssertionError: n doit être positif
9/29Terminaison d"une fonction récursive : le cas de factoriel
La fonctionfactorielle()termine. En effet :
Sin<0, la fonction renvoie une exception.
Sin=0, la fonction renvoie 1.
Sin>0, la fonction s"appelle elle-même pour une suite strictement décroissante de nombres entiers positifs : le nombre d"appels est doncfini.10/29Terminaison d"une fonction récursive
Pour la suite de Syracuse, on ne sait pas démontrer que la fonction termine ou non.defs yracuse(n): assert n> 0, n d oit tre s trictement positif if n = =1 : return 1 elif n %2= =0 : return s yracuse(n//2) else return s yracuse(3*n+1)11/29Correction d"une fonction récursive : le cas factoriel
Afin de démontrer que la fonctionfactorielle(n)calcule bienn! pour tout entier natureln, on procède à l"aide d"une démonstration par récurrence : Pour tout entier natureln, on noteP(n)la proposition :P(n): " La fonctionfactorielle(n)retournen!"
12/29 Correction d"une fonction récursive : le cas factorielDémonstration par récurrence :
Initialisation:
factorielle(0)renvoie 1.Hérédité:
Or par hypothèse de récurrence,factorielle(n)renvoien!, doncfactorielle(n+1)renvoie(n+1)×n! = (n+1)!.Conclusion:
Pour tout entier natureln,factorielle(n)renvoien!. La correction de l"algorithme est démontrée.13/29Complexité d"une fonction récursive : le cas factoriel
Pour calculerfactorielle(n), il faut faire une comparaison, une multiplication et calculerfactorielle(n-1).Si on notecnla complexité, on a donc :
?n?N?,cn=1+1+cn-1 Ainsi(cn)est une suite arithmétique de raison 2.La fonction factorielle est de complexitéO(n).
14/29La pile d"exécution : le cas factoriel
A chaque appel récursif de la fonction, il faut stocker dans une pile les résultats intermédiaires pour les restituer ensuite :>>> factorielle(4)factorielle <- 4#E mpilaged e4 factorielle <- 3#E mpilaged e3 factorielle <- 2#E mpilaged e2 factorielle <- 1#E mpilaged e1 factorielle <- 0#E mpilaged e0 factorielle -> 1#D épilagee tr etourd e1
factorielle -> 1#D épilagee tr etourd e1*1 factorielle -> 2#D épilagee tr etourd e2*1 factorielle -> 6#D épilagee tr etourd e3*2 factorielle -> 24#D épilagee tr etourd e4*6 A ne pas perdre de vue : compter le nombre d"opérations est unechose, évaluer l"espace mémoire nécessaire en est une autre...15/29La pile d"exécution : faut pas pousser Mémé
Quand on remplit trop la pile d"exécution :RuntimeError: maximum recursion depth exceeded Certes, Python permet d"utiliser la récursivité, mais ce n"était pas la préoccupation principale de Guido Van Rossum lorsqu"il a créé ce langage. Par défaut, le nombre d"appels récursifs est limité à 1000.Pour changer cela :>>>i mports ys
>>> sys.setrecursionlimit(10000) 16/29 La récursivité terminale : variante de la fonction factorielle def f actorielle(n): if n = =0 : return 1 else return n *factorielle(n-1) def f actorielleTerm(n,accu=1): if n = =0 : return a ccu else return f actorielleTerm(n-1,n * a ccu) Cette fonction se distingue de la précédente par l"usage d"un paramètre supplémentaire et l"absence d"opération entre l"appel récursif et l"instructionreturn.17/29La récursivité terminale : variante de la fonction factorielle
>>> factorielleTerm(4) factorielleTerm <- (4,)factorielleTerm <- (3, 4)#a ccu= 4 factorielleTerm <- (2, 12)#a ccu= 1 2factorielleTerm <- (1, 24)#a ccu= 2 4factorielleTerm <- (0, 24)#a ccu= 2 4factorielleTerm -> 24
factorielleTerm -> 24 factorielleTerm -> 24 factorielleTerm -> 24 factorielleTerm -> 24 Il n"est pas nécessaire d"empiler les valeurs puisqu"on ne les réutilise pas : pas de problème de pile d"exécution. Cela dit, Python ne tire pas profit de cette idée et la récursivité terminale est sans intérêt dans ce langage.18/29Nouvel exemple : la recherche dichotomique
On dispose d"un tableautde nombres triés dans l"ordre croissant et on veut déterminer si un nombrexappartient ou non à ce tableau.On comparexavec la valeur centrale du tableau :?
Sixest la valeur centrale, c"est terminé!
Sixest inférieur à la valeur centrale, on cherche dans le sous-tableau des valeurs inférieures à cette dernière. Sixest supérieur à la valeur centrale, on cherche dans le sous-tableau des valeurs supérieures à cette dernière.19/29Recherche dichotomique : une version récursive
def r echDicho(x,t ab): d = 0 f = l en (tab)-1 return r d(x,t ab,d ,f ) def r d(x,t ab,d ,f ): m = (d + f)//2 if t ab[m]= =x : return T rue if f = =d : returnF alse
if t ab[m]> x : return r d(x,t ab,d ,m -1) else return r d(x,t ab,m +1,f ) 20/29Complexité d"une recherche dichotomique
Notonsnla longueur du tableautab.
Pour effectuer une recherche dichotomique sur un tableau de longueurn, il faut faire 3 comparaisons, 2 opérations et effectuer la recherche dichotomique sur un tableau de longueur (presque) n2 En notantcnla complexité pour un tableau de longueurn, on a : c n=5+cn221/29Complexité d"une recherche dichotomique
c n=5+cn2 =10+cn4 =15+cn8 c n=5p+cn2 p oùpest tel quen2 p=1.C"est-à-dire :
p=log2(n) Ainsi la complexité de la recherche dichotomique est enO(log(n)).22/29Nouvel exemple : la suite de Fibonacci
On considère la suite définie pour tout entier naturelnpar : ?f 0=1 f 1=1 f n+2=fn+1+fn dont on rappelle pour mémoire les premiers termes :1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,258423/29La suite de Fibonacci en Python
Une version naturelle :deff ibo(n):
P our n >=1 if n < =2 : return n else return f ibo(n-1)+fibo(n-2) 24/29Complexité de la suite de Fibonacci
Notons à nouveaucnla complexité. On a :
?n?3,cn=1+cn-1+cn-2[E]On définit alorsdntel que :cn=2dn+1-1.
[E] donne alors :2dn+1-1=1+2dn-1+2dn-1-1
c"est-à-dire : d n+1=dn+dn-1 La suite(dn)est la suite de Fibonacci(fn). Comme on sait que en +∞,fn≂1⎷51+⎷5
2 n, alors on en déduit que la complexité de la suite de Fibonacci est enO(φn).25/29La suite de Fibonacci : arbre des appels
f 6f 5f 4f 3f 2f 1f 2f 3fquotesdbs_dbs44.pdfusesText_44[PDF] pélican volant de marey (1882)
[PDF] dynamisme d'un cycliste
[PDF] le futurisme mouvement artistique
[PDF] futurisme caractéristiques
[PDF] futurisme définition
[PDF] l5a les clans majeurs pdf
[PDF] l5a pdf
[PDF] l5a 4eme edition pdf
[PDF] pendule élastique vertical
[PDF] l5a 4eme edition pdf download
[PDF] pendule elastique definition
[PDF] l5a 4 edition pdf
[PDF] legende des 5 anneaux 4eme edition pdf
[PDF] pendule élastique horizontal exercice