[PDF] Récursivité 4/10/2017 1.1





Previous PDF Next PDF



Cours No 4 : Fonctions Récursives.

i. Un calcul itératif se programme par une boucle (for ou while ou repeat-until). 6. Page 7. Exemple de fonction itérative pour le calcul de factorielle (en C) 



cours 2:Complexité des algorithmes récursifs

?La factorielle de N est définie en fonction de la factorielle de N-1 A l'opposé de la récursion l'itération utilise les structures de contrôle.



Cours 7 – Récursivité I Introduction II Exemples de fonctions

Exemple : Fonction factorielle. Commençons par écrire une version itérative de la fonction factorielle i.e. une fonction.



ALGO 1.1 œ Correction TD N°5.

Calcul de la factorielle d'un entier naturel (avec une structure itérative « Pour »). Variables n : entier factorielle : entier indice : entier.



Récursivité

4/10/2017 1.1 Fonction factorielle. La fonction factorielle fac peut être définie ainsi : ... Écrire une version itérative de la suite de Fibonacci.



Algorithmique et programmation avancée

Une fonction récursive est une fonction qui fait appel à Variante de la fonction factorielle ... Factorielle récursif ? itératif int fact(int n).



Chapitre 18 Algorithmique de base

La méthode itérative nécessite l'utilisation de variables locales pour effectuer le calcul demandé. fonction factorielle(1) a été appelée en rendant 1.



Cours No 4 : Premi`eres Fonctions Récursives 1 Fonctions récursives

Un calcul itératif se programme par une boucle (for ou while ou repeat-until). Exemple de fonction itérative pour le calcul de factorielle (en C).



Correction TP de programmation no3 - Fonctions et procédures

Exercice 1. Fonction factorielle et coefficients du binôme de Newton. La fonction pour calculer la factorielle d'un entier est donnée dans le fichier binome.cpp 



RÉCURSIVITÉ PLAN CALCUL DE FACTORIELLE CODAGE ITÉRATIF

Une fonction récursive n'a pas forcément un argument numérique. def reverse(s): if s == "": return s else: return reverse( 



[PDF] Programmation itérative/récursive - limsi

La fonction factorielle - Cours S2-1 La valeur de la fonction factorielle d'un nombre entier n est le Itératif i = 1 res = 1 while( i



[PDF] Cours No 4 : Fonctions Récursives - LIRMM

Exemple de fonction itérative pour le calcul de factorielle (en C) 1 int fact(n) { // n entier 2 int i = 0; 3 int result = 1; 4 while (i < n){



[PDF] RÉCURSIVITÉ PLAN CALCUL DE FACTORIELLE CODAGE ITÉRATIF

On écrit une fonction récursive appartient testant l'appartenance ou non d'un objet x à une liste L def appartient(L x): if len(L) == 0: return False else:



[PDF] Chapitre 18 Algorithmique de base

Calcul factoriel ? Une approche itérative int factorielle(int i){ int resultat; for(resultat=1;i>1;i--) resultat*=i; return(resultat);



[PDF] cours 2:Complexité des algorithmes récursifs - Esentn

?La factorielle de N est définie en fonction de la factorielle de N-1 A l'opposé de la récursion l'itération utilise les structures de contrôle



[PDF] ALGO 11 œ Correction TD N°5

Calcul de la factorielle d'un entier naturel (avec une structure itérative « Pour ») Variables n : entier factorielle : entier indice : entier



Fonction itérative pour factorielle en PHP - WayToLearnX

15 avr 2020 · Dans ce tutoriel nous allons découvrir comment calculer le factorielle de façon itérative en utilisant la boucle for en PHP Exemple: Fonction 



[PDF] TP Informatique no 3 Récursivité et programmation dynamique

La définition récursive de fonctions est possible en Python Illustrons ce procédé avec la fonction factorielle 1 def factrec(n): 2



Récursif et itératif : factorielle boucle en récursif - France-IOI

Il est cependant possible de donner une définition récursive de la fonction factorielle : La factorielle d'un nombre N vaut 1 si N est égal à 0 et N multiplié 



[PDF] Correction TP de programmation no3

Fonction factorielle et coefficients du binôme de Newton La fonction pour calculer la factorielle d'un entier est donnée dans le fichier binome cpp

  • Comment calculer la complexité d'un algorithme récursif ?

    La complexité d'un algorithme récursif se fait par la résolution d'une équation de récurrence en éliminant la récurrence par substitution de proche en proche.
  • Comment écrire un algorithme récursif ?

    On se propose de reprendre le jeu du Plus-Moins, et d'en écrire un algorithme récursif. Principe : le joueur choisit mentalement un nombre entier entre deux bornes, fixées préala- blement (n et p par exemple), et l'algorithme proc? alors par élimination dichotomique.
  • Comment calculer le factoriel d'un nombre algorithme ?

    Prenons par exemple le calcul de la factorielle d'un nombre, une fonction mathématique qui pour une valeur entière positive, retourne le produit de tous les entiers entre 1 et cette valeur. Pour une valeur nulle, la fonction retourne 1. Par exemple, la factorielle de 5, que l'on note "5", vaut 1*2*3*4*5 = 120.
  • Définition : la programmation récursive est une technique de programmation qui remplace les instructions de boucle (while, for, etc.) par des appels de fonction. et il faut appeler boucle(0). return (s) ; //Pour sommeRec(0, s), le calcul est immédiat } On lance x = sommeRec(0, 100).

Récursivité

Des fonctions ou procédures qui s"appellent elles-mêmes

4 octobre 2017

Table des matières

1 Exemples introductifs 1

1.1 Fonction factorielle . . . . . . . . . . . . . . . . . . . . . . . . . .

1

1.2 Suite de Fibonacci . . . . . . . . . . . . . . . . . . . . . . . . . .

2

2 La récursivité en général 3

2.1 Algorithmes récursifs . . . . . . . . . . . . . . . . . . . . . . . . .

3

2.2 Fonctions et procédures récursives . . . . . . . . . . . . . . . . .

3

2.3 Avantages et inconvénients . . . . . . . . . . . . . . . . . . . . . .

3

3 Comment fonctionne la récursivité? 4

3.1 La pile d"appel . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4

3.2 Exemple de la factorielle . . . . . . . . . . . . . . . . . . . . . . .

4

3.3 Exemple de la suite de Fibonacci . . . . . . . . . . . . . . . . . .

4

4 Complexité d"un algorithme récursif 5

4.1 Définitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5

4.2 Exemple de la factorielle . . . . . . . . . . . . . . . . . . . . . . .

5

4.3 Exemple de la suite de Fibonacci . . . . . . . . . . . . . . . . . .

5

4.4 Complexité exponentielle . . . . . . . . . . . . . . . . . . . . . .

6

1 Exemples introductifs

1.1 Fonction factorielle

La fonction factoriellefacpeut être définie ainsi : si n1alorsfac(n) = 1; sinon fac(n) =nfac(n1). Cette définition est diterécursivecarfacfait appel à elle-même. Elle est valide car : il y a un cas de base qui ne gén èrepas d"app elrécursif ; il n"y aura qu"un nombre fini d"appels récursifsavant de tomber à coup sûr sur le cas de base; cette assurance est fournie par la v ariablen, qui est décrémentée de 1 à chaque appel, et donc finit par valoir 1. Implémentation Python de la factorielle récursive : 1 def fac(n): if n<=1: return 1 else: return n*fac(n-1) ce qui est la traduction exacte de la formule de récurrence. Implémentation

Python de la factorielle non récursive :

def fac2(n): p=1 for i in range(2,n+1): p*=i return p Cette version est diteitérativecar utilise une boucle, contrairement à la pré- cédente.

1.2 Suite de Fibonacci

C"est la fonctionbdéfinie par :

-b(0) = 0; -b(1) = 1; -8n2;b(n) = b(n1) + b(n2); C"est une définition récursive : chaque calcul debgénère 2 appels deb. Ce qui assure la validité de cette définition est : la présence de 2 cas de base ne gé nérantpas d"app elrécu rsif; la certitude qu"il n"y aura qu"un nom brefini d"app elsrécursifs a vantde tomber sur un cas de base; certitude qui e stfournie par la v ariablen, qui décroît strictement à chaque appel, et donc finit par valoir 0 ou 1. Implémentation Python de la suite de Fibonacci récursive : traduction (presque) mot à mot! def fib(n): if n<=1: return n else: return fib(n-1)+fib(n-2)

Exercice

Écrire une version itérative de la suite de Fibonacci. Est-ce plus difficile? Est-ce plus efficace?

Solution :

def fib2(n): if n<=1: return n else: a,b = 0,1 for i in range(2,n+1): a,b = b,a+b return b c"est bien plus difficile à concev oir; en rev anchec"est plus rapide à l"exécution, p ourdes raisons qu"on v erra. 2

2 La récursivité en général

2.1 Algorithmes récursifs

Un algorithme est ditrécursifquand sa mise en oeuvre utilise ce même algorithme. Pour être valide, cet algorithme doit impérativement vérifier les 2 contraintes de terminaison: existence d"un ou pl usieurscas de base où l"algorithme es tdirectemen t effectif; assurance qu"il n"y aura qu"un nom brefini d"app elsrécursifs a vantde déboucher sur un cas de base. Cette assurance est fournie par unevariable de contrôle: entier naturel qui doit : décroître strictemen tà c haqueapp elrécursif ; v aloir0 (ou 1) p ourles cas de base.

Exemple

Pour lister les anagrammes d"un mot, on peut :

1. exclure la dernière lettre ; 2. lister tous les anagrammes du mot restan t; 3. dans c hacunde ces mots, insérer la dernière lettre à toutes le sp ositions possibles. Ici : l"utilisation récursiv ea lieu à la deuxième étap e; les cas de base son tles mots d"u nelettre ; la v ariablede con trôleest la longueur du mot.

2.2 Fonctions et procédures récursives

Ce sont les implémentations d"algorithmes récursifs. Elles se caractérisent par le fait que le nom de la fonction (ou procédure) apparait dans sa déclaration. Pour déclarer une fonction récursive, vous devrez : v ousass urerqu"il y a un ev ariablede con trôle; commencer par traiter les cas de base.

2.3 Avantages et inconvénients

L"avantage principal de la récursivité est la simplicité de programmation. Pour écrire un programme récursif, il suffit de : trouv ercommen tréduire le problème de taille nà un ou plusieurs pro- blèmes de taille plus petite; traduire simplemen tla relation trouv ée; v érifierla terminaison de l"algorithme.

Les inconvénients sont :

la m ultiplicationdes mémoires a llouéesau sto ckagedes résultats en at- tente, qui peut devenir rédhibitoire; le nom brede calculs effectués, souv entbien plus grand qu"en program- mation itérative. 3

3 Comment fonctionne la récursivité?

3.1 La pile d"appel

Le principe est d"utiliser une pile, ditepile d"appel, sur laquelle on empile les calculs en attente. T outapp elà une fonction crée d"ab ord2 m émoires:

1 mémoire p oursto ckerl"argumen t,noté ici x ;

1 mémoire p oursto ckerle résul tat,noté ici y .

Si le calcul de y n"est pas encore p ossible,ce qui est le cas s"il y a un appel récursif, le couple (x,y) est empilé. La pile augmente tant qu"il y a des calculs en attente. Dès qu"un calcul de y est p ossible,(x,y) est dépilé ;on récup èreainsi y , et on utilise généralement sa valeur pour faire le calcul qui est en attente au sommet de la pile. Quand la p ileest vide, le dernier y qui a été dépilé fournit le résultat.

3.2 Exemple de la factorielle

def fac(n): if n<=1: return 1 else: return n*fac(n-1)

On va visualiser l"évolution de la pile d"appel pourfac(5):(5;5?) (5;120)(4;4?)(4;24)(3;3?)(3;6)(2;2?)(2;2)(1;1)3.3 Exemple de la suite de Fibonacci

def fib(n): if n<=1: return n else: return fib(n-1)+fib(n-2)

On va visualiser l"évolution de la pile d"appel pourfib(4):(4;?) (4;2+?) (4;3)(3;?) (3;1+?) (3;2) (2;?) (2;1+?) (2;1)(2;?) (2;1+?) (2;1) (1;1) (1;1) (0;0)(1;1) (0;0)4

4 Complexité d"un algorithme récursif

4.1 Définitions

La complexité temporelled"un algorithme est l"ordre de grandeurdu nombre d"opérations élémentaires qu"il va nécessiter pour résoudre un problème de taillen. Ce nombre est à peu près proportionnel au temps effectif de calcul. La complexité spatialed"un algorithme est l"ordre de grandeurdu nombre de mémoires qu"il va utiliser pour résoudre un problème de taille n.

Dans les deux cas on di stinguela complexité :

en mo yenne; dans le meilleur des cas ; dans le pire des cas. La plus utile est la première, la plus discriminante est la dernière.

4.2 Exemple de la factorielle

def fac(n): def fac2(n): if n<=1: return 1 p=1 else: return n*fac(n-1) for i in range(2,n+1): p*=i return p P ourcalcul ern!par la méthode itérative, il faut : -n1multiplications : complexité temporelleO(n);

4 mémoires : complexité spatiale O(1).

P ourcalcul ern!par la méthode récursive, il faut : -ntests,n1multiplications : complexité temporelleO(n); -2nmémoires (2 à chaque appel) : complexité spatialeO(n). Les deux méthodes s"exécutent en à peu près la même durée, mais la deuxième est plus gourmande en mémoire.

4.3 Exemple de la suite de Fibonacci

def fib2(n): if n<=1: return n else: a,b = 0,1 for i in range(2,n+1): a,b = b,a+b return b Nom bred"op érations: 1(+2) + (n1)(1(+2))soit une complexité tem- porelleO(n): raisonnable. Nom brede mémoires : 5 soit une complexité spatiale O(1): excellente. def fib(n): if n<=1: return n else: return fib(n-1)+fib(n-2) 5 Je noteM(n)le nombre de mémoires utilisée parfib(n):

8n2; M(n) = 2 +M(n1)

car contrairement au temps,la mémoire est recyclable: on peut réutiliser celles du calcul defib(n-1)pourfib(n-2). On a directement :

M(n) =M(0) + 2n

doncM(n) =O(n): la complexité spatiale est raisonnable, mais moins bonne qu"en itératif.

Je noteC(n)le nombre de calculs faits pourfib(n):

8n2; C(n) = 1 +C(n1) + 1 +C(n2)

On poseU(n) =C(n) + 2car -2 est le point fixe de la récurrence :

8n2; U(n) =U(n1) +U(n2)

C"est une récurrence classique qu"on résout par la méthode de l"équation carac- téristique; on trouve :

U(n) =rn+snoùr=1 +p5

2 '1:6; s=1p5 2 ' 0:6 On en déduitU(n) =O(rn)puisC(n) =O(rn). La complexité temporelle est très mauvaise car exponentielle.

4.4 Complexité exponentielle

Pour calculerfib(100), la machine fera de l"ordre der100opérations. Or : log

10(r100) = 100log10(r)'20

ce qui signifie qu"il y aura environ1020opérations. À raison de109opérations par seconde, le calcul prendra de l"ordre de1011secondes, soit environ 3000 ans! D"une manière générale, les algorithmes qui ont une complexité temporelle du typeO(qn)avecq >1ne peuvent pas être exécutés en temps acceptable pourn grand, contrairement à ceux enO(np)qui peuvent l"être (surtout sipn"est pas trop grand). Ces derniers sont dits detype P. 6quotesdbs_dbs44.pdfusesText_44
[PDF] fonction itérative php

[PDF] operation factorielle

[PDF] différence entre algorithme itératif et algorithme récursif

[PDF] expression de couturiere

[PDF] fonction récursive

[PDF] automobile in corsa

[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