[PDF] [PDF] Chapitre 18 Algorithmique de base





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).

Chapitre 18 : Algorithmique de base 287

© Mohamed N. Lokbani v1.01 POO avec C++

Chapitre 18

Algorithmique de base

Chapitre 18 : Algorithmique de base 288

© Mohamed N. Lokbani v1.01 POO avec C++

1. Récursivité

- Une procédure récursive est une procédure qui s'appelle elle-même en cours d'exécution.

int UneFonction(int a) { return (a * UneFonction(a-1); - Si l'on appelle " UneFonction » avec " a=4 », il y aura un appel récursif infini.

- En effet, " UneFonction(4) » va appeler " UneFonction(3) » qui va appeler " UneFonction(2) »

" UneFonction(1) » etc. Cet appel de fonction récursif va finir par planter un jour car l'ordinateur n'a pas

une mémoire infinie.

- Toute procédure récursive doit contenir donc un " Point d'arrêt » qui permet d'arrêter l'appel récursif.

UneFonctionRécursive(arguments) {

if (Test_ARRÊT) { instructions reliées à l'arrêt }else{ instructions suite

UneFonctionRécursive(arguments)

instructions suite

Chapitre 18 : Algorithmique de base 289

© Mohamed N. Lokbani v1.01 POO avec C++

- Calcul factoriel ▪ Une approche itérative int factorielle(int i){ int resultat; for(resultat=1;i>1;i--) resultat*=i; return(resultat); ▪ factorielle(n)= n*n-1*n-2*.....*1 ▪ factorielle(3)= 3*2*1 = 6

Variable

i Variable resultat Déroulement des instructions i=3 resultat=0 i=3 resultat=1 resultat = resultat*i=1*3=3 i=2 resultat=3 resultat = resultat*i=3*2=6 i=1 resultat=6 i>1 donc sortir de la boucle for

Retourner 6

▪ La méthode itérative nécessite l'utilisation de variables locales pour effectuer le calcul

demandé.

Chapitre 18 : Algorithmique de base 290

© Mohamed N. Lokbani v1.01 POO avec C++

▪ Une approche récursive • Il est toujours possible de transformer un programme récursif en un programme itératif.

L'inverse est vrai aussi.

• La récursivité permet d'énoncer des problèmes complexes de manière concise sans perte

d'efficacité. • Le coût d'implémentation est assumé par des mécanismes internes du système. • Ces mécanismes utilisent une pile interne. • La plupart des systèmes de programmation modernes intègrent ce genre de mécanismes.

• Il est important d'éviter d'écrire des fonctions récursives inefficaces et insolubles !

• Si le temps de calcul ou la mémoire utilisée sont prohibitifs pour de grands nombres de données il faudra traduire la procédure récursive en procédure itérative. int factorielle(int i){ if (i>1) return (i*factorielle(i-1)); return(1);

Chapitre 18 : Algorithmique de base 291

© Mohamed N. Lokbani v1.01 POO avec C++

▪ factorielle(3)= 3*2*1 = 6

Analyse de la pile interne

i=1 i=2 i=2 i=2 i=3 i=3 i=3 i=3 i=3 (a) (b) (c) (d) (e)

• (a) appel de factorielle(3), création de i, à qui on affecte la valeur 3. comme i>1 on calcule

i*factorielle(i-1) : i=3,i-1=2 on appelle factorielle(2). • (b) création i, affecté de la valeur 2, i>1 donc on appelle factorielle(1).

• (c) création de i, i=1 donc on quitte la fonction, on libère la pile de son sommet, on retourne où la

fonction factorielle(1) a été appelée en rendant 1.

• (d) on peut maintenant calculer i*factorielle(1), i (sommet de la pile) vaut 2, factorielle(1) vaut 1, on

peut rendre 2, puis on "dépile" i.

• (e) on peut calculer i*factorielle(2), i vaut 3 (sommet de la pile), factorielle(2) vaut 2, 3*2=6, on

retourne 6, la pile est vidée et retrouve sont état initial.

Chapitre 18 : Algorithmique de base 292

© Mohamed N. Lokbani v1.01 POO avec C++

- Calcul du PGCD (Plus Grand Commun Diviseur) ▪ Le plus grand commun diviseur de deux entiers qui ne sont pas nuls, est le plus grand nombre entier qui divise les deux nombres.

A=18=1

*2*3*3

B=21=1

*3*7

PGCD(A,B)=PGCD(18,21)=1*3=3

Procédure itérative

int pgcd(int a,int b) { int r; while (b!=0) { r=a%b;a=b;b=r; return a;

Procédure récursive

int pgcd(int a, int b){ return (b!=0)?a:pgcd(b,a%b);

Chapitre 18 : Algorithmique de base 293

© Mohamed N. Lokbani v1.01 POO avec C++

2. Techniques de Recherche

2.1 Recherche linéaire (séquentielle)

- On examine successivement tous les éléments de la table et on regarde si on trouve l'élément recherché

dans la table.

- Le nombre de tests de comparaison permet de déterminer la complexité d'une recherche donnée.

- Dans ce cas, nous effectuons au pire n opérations, n étant la taille de la table. - On dit que la complexité d'une telle recherche est de l'ordre de n ou O (n). - Dans le meilleur des cas, on tombe directement sur la valeur, n sera égale à 1.

- Dans le pire des cas, on est obligé de balayer toute la table, n sera égale à la taille de la table.

- Si les éléments sont déjà triés, on peut interrompre la recherche avant d'atteindre la fin du tableau.

2.2 Recherche dichotomique

- Si vous avez un tableau déjà trié de taille n, on peut écrire une fonction qui cherche si un élément donné

se trouve dans la table. - Il faut voir cela comme la recherche d'un mot dans un dictionnaire

Chapitre 18 : Algorithmique de base 294

© Mohamed N. Lokbani v1.01 POO avec C++

- On choisit une page au milieu du dictionnaire. - On regarde si le mot cherché est avant ou après cette page. - On cherche maintenant dans la moitié correspondante du dictionnaire. - On dit qu'on procède par dichotomie. - Le processus peut-être résumé ainsi :

▪ On cherche à savoir d'abord si x est dans t[deb, fin[. Pour cela, on calcule le milieu =

(deb+fin)/2 et on compare x à t[milieu]. ▪ Si x=t[milieu], on a gagné. On arrête la recherche. ▪ Dans le cas contraire, • on réessaie avec t[deb, milieu[ si t[milieu]>x • sinon dans t[milieu+1,fin[. - Dans le pire des cas, on divise N par deux jusqu'à qu'il soit égal à 1. - On obtient alors log

2N opérations.

Chapitre 18 : Algorithmique de base 295

© Mohamed N. Lokbani v1.01 POO avec C++

2.3 Recherche récursive

- On fait appel au même programme au cours de son déroulement en utilisant le principe de récursivité

développé au début de ce chapitre.

3. Tris

- Le tri est rendu nécessaire par exemple s'il faut établir le classement des élèves, mettre en ordre certaines informations

d'une application quelconque : tout cela, afin de permettre de trouver l'information recherchée de manière rapide.

- Nous allons étudier trois sortes de tris : par sélection, à bulles et par insertion.

- On suppose que nous avons un tableau d'entiers de taille N. On suppose aussi que le tableau est indexé de 0 à N-1.

3.1 Tri par sélection

- L'algorithme de tri associé au tri par sélection consiste à trouver l'emplacement du plus petit élément dans un tableau.

- Dès que cet élément est trouvé, nous l'interchangeons avec le premier élément du tableau (i=0).

- Nous recommençons l'opération pour le reste du tableau (i.e. i = [1, N [ ; N étant la taille du tableau).

- Tableau à trier : [8, 6, 9, 3, 1].

▪ L'index m pointe le plus petit élément dans un tableau contenant les éléments restants à trier.

Chapitre 18 : Algorithmique de base 296

© Mohamed N. Lokbani v1.01 POO avec C++

8 6 9 3 1

Éléments à trier

8 6 9 3 1

i m

1 6 9 3 8

i m

1 3 9 6 8

i m

1 3 6 9 8

i m

1 3 6 8 9

FINI

Chapitre 18 : Algorithmique de base 297

© Mohamed N. Lokbani v1.01 POO avec C++

3.2 Tri à bulles

- Le tri à bulles est une variante du tri par sélection.

- Son principe consiste à échanger deux éléments consécutifs qui ne sont pas ordonnés d'un tableau donné.

- Après ce parcours, l'élément le plus grand va se retrouver en dernier. - Nous recommençons l'opération avec les N-1 éléments du tableau [0, N-1[. - L'algorithmique est comme suit : affecter true à flag tantQue flag=true faire affecter false à flag pourChaque (éléments de tableau)-1 si tableau[courant]>tableau[suivant] alors permuter les 2 valeurs affecter true à flag fin si fin pourChaque fin tantQue

Chapitre 18 : Algorithmique de base 298

© Mohamed N. Lokbani v1.01 POO avec C++

8 6 9 3 1

Éléments à trier

8 6 9 3 1

I m

1e paire

6

8 9 3 1

i m

2e paire (déjà triée)

6 8

9 3 1

i m

3e paire

6 8 3

9 1 i,m

4e paire

6 8 3 1

9

FINI itération -1-

Chapitre 18 : Algorithmique de base 299

© Mohamed N. Lokbani v1.01 POO avec C++

- Ainsi prend fin la première itération avec l'élément le plus élevé qui se retrouve à la fin du tableau.

- Notons que la valeur de la variable est à " true » car nous avons permuté au moins une fois deux éléments

consécutifs.

- Nous recommençons l'opération mais qu'avec les éléments non encore triés du tableau i.e : [6, 8, 3, 1].

- Nous obtenons ainsi les résultats suivants pour les autres itérations :

Itération Combinaison flag

2 63189 true

3 31689 true

4 13689 true

5 13689 true

Chapitre 18 : Algorithmique de base 300

© Mohamed N. Lokbani v1.01 POO avec C++

3.3 Tri par insertion

- L'algorithme du tri par insertion repose sur le même principe que la technique utilisée pour trier un

paquet de cartes. - Ayant i-1 cartes déjà triées, on essaye de mettre la i e carte à sa place dans le paquet déjà trié. - Ainsi de suite jusqu'à i=N, N étant le nombre de cartes. - La variable m représente l'index de la case où l'élément sera inséré. - La variable i représente l'index de l'élément en cours de traitement.

Chapitre 18 : Algorithmique de base 301

© Mohamed N. Lokbani v1.01 POO avec C++

8 6 9 3 1

Éléments à trier

8 6 9 3 1

m i

1e carte à insérer

6 8 9 3 1

m,i

2e carte à insérer

6 8 9 3 1

m i

3e carte à insérer

3 6 8 9 1

m i

4e carte à insérer

1 3 6 8 9

FINI

Chapitre 18 : Algorithmique de base 302

© Mohamed N. Lokbani v1.01 POO avec C++

quotesdbs_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