0% ont trouvé ce document utile (0 vote)
205 vues21 pages

Cours Algo

Ce document décrit les éléments fondamentaux de l'algorithmique, notamment les définitions d'algorithme, programme et structures de données comme les tableaux et matrices. Il présente également les opérateurs et structures de contrôle comme les conditions et boucles.

Transféré par

FULGENCE DIBI
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
205 vues21 pages

Cours Algo

Ce document décrit les éléments fondamentaux de l'algorithmique, notamment les définitions d'algorithme, programme et structures de données comme les tableaux et matrices. Il présente également les opérateurs et structures de contrôle comme les conditions et boucles.

Transféré par

FULGENCE DIBI
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
Vous êtes sur la page 1/ 21

CH1 

: ELEMENTS D’ALGORITHMIQUE

I/Quelques définitions

Définition 1 (Algorithme). Un algorithme est suite finie d’opérations élémentaires


constituant un schéma de calcul ou de résolution d’un problème.
Historique : Le mot « algorithme » provient de la forme latine (Algorismus) du nom du
mathématicien arabe ALKHAREZMI

Thèse de Turing-Church: les problèmes ayant une solution algorithmique sont ceux
résolubles par une machine de Turing (théorie de la calculabilité)
Troisième loi de Greer : un programme informatique ne fait jamais ce que vous voudriez qu’il
fasse …, il fait seulement ce que vous lui dites de faire.

 Un algorithme est un procédé calculatoire sur un problème donné en nombre fini


d’instructions pour obtenir des résultats.

 La programmation est l’activité de traduire dans un langage de programmation


un algorithme.

L’activité de programmation se résume aux étapes suivantes :

-la présentation d’un problème concret


-l’analyse du problème
-l’écriture d’algorithmes
-le codage dans un langage de programmation

Différences entre algorithmes et programmes


Un programme est la réalisation (l’implémentation) d’un algorithme au moyen d’un langage
donné (sur une architecture donnée). Il s’agit de la mise en œuvre du principe. Par exemple,
lors de la programmation on s’occupera parfois explicitement de la gestion de la mémoire
(allocation dynamique en C) qui est un problème d’implémentation ignoré au niveau
algorithmique.

II /Structure générale d’un algorithme

ALGORITHME identificateur ;

CONST(constante)
Nom_constante=valeur ;
TYPE(type)
Nom_type=définition ;

VAR(variable)

Description des ressources


manipulées dans l’algorithme

DEBUT(programme principal)

Description du processus
opératoire

FIN.

Dans la rubrique des constantes il s’agit de déclarer des constantes qui peuvent être
manipulées par le programme.
Ex  : taille d’un tableau
Au niveau de la rubrique type, il s’agit de définir des types pouvant être utilisés.
Généralement ce sont des types construits par le concepteur.

Ex  : un enregistrement de type « étudiant » défini par les champs matricule, nom, classe et
solde.

Dans la partie variable il s’agit de déclarer toutes les ressources manipulées dans le
programme. Ces ressources peuvent être des ressources données, des fonctions ou des
procédures.

Enfin dans le programme principal on décrit le processus opératoire.

III / Structures de données simples


1. Syntaxe d’un identificateur

Un identificateur est le nom donné par le programmeur à tout objet manipulé dans
l’algorithme. Il permet de nommer un objet informatique appelé ressource donnée ou
ressource action.
La règle syntaxique utilisée est qu’un identificateur est une suite de caractères
alphanumériques avec le premier étant un caractère.

Ex  : salaire2007 ;
salaire_juin ;
SalaireJuin ; identificateurs valides
Salaire13ememois ;
13ememois ;
Salaire juin ; identificateurs non valides

Remarques :

- Il n’y a pas de limitation du nombre de caractères pour l’écriture d’un


identificateur.

- Il faut choisir au mieux un nom très proche de la réalité.

- faire attention à la casse des caractères car en général, les langages de


programmation sont sensibles à la casse.

Notion de Variable
Une variable est une donnée que l’on est appelé à manipuler dans l’algorithme. Elle peut
être de plusieurs types.

VAR
Nom : chaîne de caractères[20] ;
Age : entier ;

2. Le type entier

Le type entier est utilisé pour les identificateurs appartenant à l’ensemble des entiers
relatifs.
Ex  :

VAR
X : ENTIER ; XЄZ

3 . Le type réel

Le type réel est utilisé pour les identificateurs appartenant à l’ensemble des réels.

Ex  :
VAR
X : REEL ; XЄR

4 . Le type caractère

Le type caractère est utilisé pour les identificateurs appartenant à l’ensemble des caractères.
Ex  :
VAR
X : CARACTERE ; x Є { A,…,Z,0,…,9,caractères spéciaux}
5 . Le type chaîne de caractères

Le type chaîne de caractères est utilisé pour les identificateurs appartenant à l’ensemble des
mots.
Ex  :
VAR
X : CHAINE DE CARACTERES[taille] ; (ou CHAINE)

Généralement sur plusieurs plateformes de développement, les chaînes de caractères sont


simulées par les tableaux de caractères.

6. Le type logique

Le type logique est utilisé pour des identificateurs appartenant à l’espace de valeur
« vrai » ou «faux ».
Ex  :
VAR
L : logique ; L Є {V,F}

7. Les tableaux

Un tableau est un objet organisé ou structuré permettant de manipuler plusieurs


informations de même type en nombre fixe durant la vie de l’algorithme. Chaque élément
du tableau est appelé composante.
Les tableaux sont stockés en mémoire centrale comme les autres variables contrairement
aux fichiers qui sont stockés sur disque.
Une propriété importante des tableaux est de permettre un accès direct aux données grâce
à l’indice.
On appelle vecteur un tableau à une seule dimension.
La syntaxe de déclaration d’un tableau est :
Identificateur :TABLEAU[Vi..Vf] DE TYPE ;
Ici Vi représente la valeur initiale et Vf la valeur finale, ce sont des constantes de tout type.

Ex  :
T : TABLEAU[1..5] DE ENTIER

Remarque : Pour parcourir un tableau on utilise un indice de parcours.


Ex  :
POUR I ← 1 JUSQU'A N FAIRE
LIRE(T[I]) ;

Les matrices
Les matrices sont faites pour simuler des tableaux de tableaux.
Soit A une matrice à n lignes et p colonnes ou chaque composante a i,j est d’un type donné. La
syntaxe de déclaration est :
VAR
A : TABLEAU[1..N ,1..P] DE TYPE ;

N lignes A[I,J]

P colonnes

Pour manipuler la matrice A l’on peut utiliser 2 indices de parcours I et J.


Ex  :
A :TABLEAU[1..N] DE TABLEAU[1..P] DE T.
POUR I ← 1 JUSQU'A N FAIRE
POUR J ← 1 JUSQU'A P FAIRE
LIRE(A[I,J]) ;

IV/ les actions

Les actions concernent les opérations décrivant le processus opératoire.

1. Les expressions arithmétiques

EXPRESSION SYMBOLE EXEMPLE


Addition + 7+2 = 9
Soustraction - 7-2 = 5
Multiplication * 7*2 = 14
Division réelle / 7/2 = 3.5
Division entière DIV 7 DIV 2 = 3
Modulo MOD 7 MOD 2 = 1

2. Les expressions logiques


Les expressions logiques sont données par :

-la négation (NON)


-la conjonction (ET)
-la disjonction (OU)

L1 L2 NON L1 L1 OU L2 L1 ET L2
V V F V V
V F F V F
F V V V F
F F V F F

3. Les expressions relationnelles

Elles concernent les variables appartenant à des ensembles ordonnés et le résultat est
logique. Les opérateurs relationnels sont :

EXPRESSION SYMBOLE
Supérieur >
Supérieur ou égal ≥
Inférieur <
Inférieur ou égal ≤
Egal =
Différent ≠

4. L’affectation

Le symbole utilisé pour l’affectation est : «  ← » et la règle syntaxique est la suivante :
Identificateur ← expression ;

Remarque : Dans un problème d’affectation les règles de compatibilité de type exigent que
l’expression et l’identificateur soient du même type ou que l’expression soit d’un type
contenu dans celui de l’identificateur.
Ex  :
disc ← b*b-4*a*c ;

5. Les entrées sorties

Pour les entrées, la lecture se fait à partir d’une unité périphérique quelconque. Dans notre
cas, il s’agira souvent du clavier.
La syntaxe utilisée est :
LIRE(liste identificateurs) ;
Ex  :
LIRE (A,B) ;

Pour la sortie, l’affichage se fait sur une unité périphérique quelconque. Dans notre cas il
s’agira souvent de l’écran.
La syntaxe utilisée est :
ECRIRE(liste identificateurs ou expression) ;
Ex  :
ECRIRE(‘somme de’, A ,’et’, B, ’est :’, A + B) ;

V / Les structures de contrôle

1. La séquence

Ex  :
disc←b*b – 4*a*c ;

x1←(-b- racine(disc))/(2*a) ;
x2←(-b+racine(disc))/(2*a) ;

2. Primitive de blocage

Les primitives de blocage sont utilisées pour un bloc d’actions.


La primitive est ouverte avec l’instruction « DEBUT » et fermée avec l’instruction « FIN ».
Ex  :
DEBUT
A ← 3 ;
B ← 5 ;
C ← A + B ;
ECRIRE(C) ;
FIN ;

3. L’alternative

L’alternative c’est nous donner la possibilité d’exécuter une action si une condition est
réalisée ou non.
La règle syntaxique utilisée est la suivante :

SI (expression logique) ALORS


Action1
SINON
Action2 ;

Remarque : Au cas où Action1 ou Action2 sont composées d’actions élémentaires, il faut


utiliser la primitive de blocage (début et fin).
Ex  :
SI(expression logique) ALORS
DEBUT
Action11 ;
-
-
Action1n ;
FIN ;
SINON
DEBUT
Action21 ;
-
-
Action2n ;
FIN ;

Ex  :
SI(total≥200) ALORS
DEBUT
ECRIRE(‘admis’) ;
ECRIRE(‘s’inscrire INPHB’) ;
FIN ;
SINON
DEBUT
ECRIRE(‘échoué’) ;
ECRIRE(‘reprendre la terminale’) ;
FIN ;

4. La conditionnelle

La conditionnelle est une variante de l’alternative.


La syntaxe est la suivante :

SI(expression logique) ALORS


Action ;

Ex  :
SI(moy≥10) ALORS
ECRIRE(‘me marier’) ;

5. La structure itérative (répétitive)

La structure itérative c’est le fait de répéter une action tant qu’une condition reste vraie.
La syntaxe utilisée est :
TANTQUE (expression logique) FAIRE
Action ;

Remarque : Action doit contenir un moyen de gérer l’expression logique afin que
l’algorithme s’arrête.

Ex  :
Fact ← 1 ; I ← 1 ;
TANT QUE (I≤N) FAIRE
DEBUT
Fact ← Fact*I ;
I ← I + 1 ;
FIN ;

Une variante de la structure itérative est la boucle POUR que l’on utilise quand on connaît le
nombre d’itérations.
Syntaxe :
POUR (identificateur ← valeur_début) JUSQU'A valeur_fin FAIRE
Action ;

Ex  :
Fact ← 1 ;
POUR I ← 1 JUSQU'A N FAIRE
Fact ← Fact*I ;

Une autre variante de la structure itérative est la répétitive dont la syntaxe est :
REPETER Action
JUSQU'A (condition) ;

Ex  :
REPETER
DEBUT
ECRIRE(‘entrer code’) ;
LIRE(code) ;
FIN
JUSQU'A (code = ‘inphb’) ;

6. La structure de choix multiples


Une donnée est successivement comparée à des valeurs constantes.

Cas Ou Donnée Vaut


Valeur1 : Actions1
Valeur2 : Actions2
...
ValeurN : ActionsN
Autre : ActionsDéfaut
FinCas

Remarque : la partie ActionsDéfaut peut ne pas exister.


Plusieurs valeurs différentes peuvent être regroupées sur une même ligne si les actions
correspondantes sont identiques.

Exemple : affichage de la nature d’un caractère.


Var
C : caractère ;
Début
Ecrire(‘Donner un caractère’) ;
Lire(c ) ;
Cas Ou c vaut
‘A’..’Z’ : écrire(‘Lettre majuscule) ;
‘a’..’z’ : écrire(‘Lettre minuscule) ;
‘0’..’9’ : écrire(‘Chiffre’) ;
autre : écrire(‘Ni lettre ni chiffre’) ;
Fin Cas
fin
CH2 : FONCTIONS ET PROCEDURES

I / Notion de modularité

Lorsqu’un problème s’avère complexe on le découpe en petits problèmes de complexité


moindre pour faciliter sa résolution.
En informatique, généralement lorsqu’un programme est grand, on le découpe en sous-
programmes : c’est la notion de modularité.
Les différents modules peuvent être des fonctions ou des procédures.
Cela a offert de nombreux avantages à la programmation dont :

-la réutilisation des sous-programmes


-le gain de temps
-une maintenance plus facile des logiciels

II/ Les procédures

Une procédure est un sous-programme qui permet de découper un programme en plusieurs


morceaux. Chaque procédure définit une nouvelle instruction que l’on peut appeler en tout
endroit du programme.
Le découpage d’un problème en procédures qu’on implémente relève d’une analyse
descendante, c’est à dire aller du général au spécifique.
Ecrire une procédure c’est tout simplement donner un nom à un groupe d’instructions.
L’appel de ce nom à divers endroits du programme provoque à chaque fois l’exécution de ce
groupe d’instructions.

1. Procédure sans paramètre

Une ressource action est appelée procédure et a la même structure qu’un algorithme,
c’est à dire qu’elle est identifiée par un nom et se décrit formellement dans le niveau VAR de
la ressource mère après celle, généralement, des données.

ALGORITHME identificateur ;
CONST
Déclaration des constantes
TYPES
Déclarations des types
VAR
Déclaration des variables
PROCEDURE identificateur ;
VAR
Ressources propres à la procédure
DEBUT
-
-
FIN ;
DEBUT(programme principal)

FIN.

L’activation d’une procédure se fait dans la partie principale par un appel à l’exécution en la
nommant.
Dans le corps d’une procédure deux sortes de ressources peuvent être manipulées :

-les ressources locales définies dans la partie description des ressources de la


procédure et leur domaine de validité se limite strictement à cette procédure, donc à sa
durée de vie.
-les ressources non locales définies dans la partie description des ressources de la
procédure mère. De la même manière ces ressources sont aussi accessibles par toutes les
procédures internes à la procédure en question.

Remarque :
-les ressources déclarées au niveau de l’algorithme sont dites ressources globales et
leur durée de vie est égale au temps d’exécution de l’algorithme.
-Quand une variable est locale à une procédure,
il n’y a pas d’inconvénient que le même identificateur soit utilisé pour une variable
de la procédure mère, la règle étant que celle qui est la plus directement visible est prise en
compte.

ALGORITHME Essai ;
VAR
X,Y :ENTIER ;
PROCEDURE Echange ;
VAR
T : ENTIER ;
DEBUT
T ← X ; X ← Y ; Y ← T ;
ECRIRE(X,Y) ;
FIN ;
DEBUT(programme principal)
ECRIRE(‘1er programme procédure’) ;
X ← 2 ; Y ← -1 ;
Echange ;
FIN .
Echange est une procédure sans paramètre car lors de l’appel elle n’a pas besoin
d’informations d’appel.

2. Procédure avec paramètres

A l’activation d’une procédure les seules informations concernées sont celles qui lui sont
locales et toutes celles qui lui sont globales. De ce fait, la seule possibilité de faire parvenir
des informations à l’entrée d’une autre procédure ou de faire communiquer des
informations résultats après son activation est de les déclarer au niveau global.
Quelques fois, le besoin de paramétrer une procédure s’impose car généralement les
procédures ou fonctions communiquent entre elles.
Lors de la manipulation d’une procédure, il faudrait faire le distinguo entre les paramètres
formels et les paramètres effectifs.
Un paramètre est dit formel lorsqu’il est décrit lors de la description d’une procédure.
Un paramètre est dit réel ou effectif lorsqu’il est fourni par la procédure appelant et il peut
varier d’un appel à l’autre lors de l’activation de la procédure.
Remarque : Les paramètres réels indiqués dans l’appel se substituent aux paramètres
formels en respectant l’ordre dans lequel ils ont été déclarés ainsi que leur type.

ALGORITHME Essai ;
VAR
X,Y :ENTIER ;(Variable globale)
PROCEDURE Echange(I,J :ENTIER) ;
VAR
T :ENTIER.(Variable locale)
DEBUT
T ← I ; I ← J ; J← T ;
ECRIRE(I,J) ;
FIN ;
DEBUT (Programme principal)
ECRIRE(‘1er programme procédure’) ;
X ← 2 ; Y ← -1 ;
ECRIRE(X,Y) ;
Echange(X,Y) ;
FIN.

Puisque les procédures et fonctions communiquent entre elles, il se pose la problématique


de transmission de paramètres.
Une variable se définit comme un contenu et un contenant auxquels il va falloir faire
attention au mode de transmission.

a) Mode de transmission par valeur

Un paramètre est dit passé par valeur si c’est le contenu qui est passé, donc accessible dans
la procédure indépendamment de son contenant. La syntaxe utilisée pour une procédure
quand les paramètres sont passés par valeur est :
PROCEDURE identificateur (liste identificateur :type1,…, liste identificateur :typeN) ;
VAR
Description des ressources locales

DEBUT

Description action de la procédure

FIN ;

Ex  :
ALGORITHME MTN ;
VAR
R : ENTIER ;
PROCEDURE Bonus(PCT :ENTIER) ;
DEBUT
PCT ← 1,1*PCT ;
ECRIRE(PCT) ;
FIN ;
DEBUT
R ← 5000 ;
ECRIRE(R) ;
Bonus(R) ;
ECRIRE(R) ;
FIN.

Quelles que soient les modifications opérées sur les paramètres formels passés par valeur,
après exécution de la procédure, le paramètre effectif retrouve sa valeur d’avant appel.

b) Mode de transmission par adresse

Un paramètre est dit passé par adresse si toute modification du paramètre effectif dans la
procédure appelée se retrouve après son activation. En d’autres termes c’est l’adresse du
paramètre représentée par l’identificateur c’est à dire le contenant qui est passé comme
argument contrairement au passage par valeur où c’est le contenu.
La syntaxe de déclaration d’une procédure dont les paramètres sont passés par adresse est :

PROCEDURE(VAR liste ident :type1,…,VAR liste ident :typeN) ;


VAR
Description ressources locales

DEBUT

Description processus opératoire

FIN ;
Ex  :
ALGORITHME MTN_ADRESSE ;
VAR
R : ENTIER ;
PROCEDURE Bonus(VAR PCT :ENTIER) ;
DEBUT
PCT ← 1,1*PCT ;
ECRIRE(PCT) ;
FIN ;
DEBUT
R ← 5000 ;
ECRIRE(R) ;
Bonus(R) ;
ECRIRE(R) ;
FIN.

Une utilisation du paramètre passé par adresse est la récupération du résultat après
l’activation de la procédure.

III/ Les fonctions

Une fonction est une procédure particulière ou on privilégie un résultat particulier à


condition qu’il soit unique et qu’il soit aussi de type simple.
Une fonction est une procédure qui renvoie un résultat de manière à ce qu’on puisse
l’appeler dans une expression.
Une fonction peut être sans paramètre ou avec paramètres.
Lorsqu’elle a des paramètres les arguments sont passés par valeur.
La syntaxe de déclaration d’une fonction sans paramètres est :

FONCTION identificateur : type ;


VAR
Description des ressources locales

DEBUT
Description du processus opératoire

Identificateur ← expression du même type que la fonction


FIN ;

La syntaxe de déclaration d’une fonction avec paramètres est :

FONCTION identificateur(liste ident :type) :type ;


VAR
Description des ressources locales
DEBUT
Description du processus opératoire
Identificateur ← expression de même type que la fonction
FIN ;

Ex  :
ALGORITHME TEST_SOMME ;
VAR
A,B :ENTIER ;
FONCTION Somme(I,J :ENTIER) :ENTIER ;
VAR
Som,K : ENTIER;
DEBUT
K ← 5 ;
ECRIRE(‘merci’,K,’fois pour l’addition’) ;
Som ← I + J ;
Somme ← Som ;
FIN ;
DEBUT
ECRIRE(‘essai d’une fonction’) ;
A ← 3 ; B ← -15 ;
ECRIRE(‘la somme est :’,Somme(A,B)) ;
FIN .
CH3 : LES TYPES COMPOSES

A côté des types prédéfinis comme ENTIER, REEL, CARACTERE etc… le concepteur peut
construire d’autres types qu’il fait admettre au compilateur et à ce moment-là, l’on pourra
utiliser des variables de ce type.

1. Types intervalles

Un intervalle est un sous ensemble de valeurs consécutives de types hôtes. La syntaxe de


déclaration est :
N..M
Où N et M sont des constantes du même type, et sont les bornes inférieures et supérieures
de l’intervalle avec N et M inclus.

Ex  :
VAR
Age : 0..150 ;

2. Type énuméré

En général l’on utilise le type énuméré pour créer un espace de valeurs où toutes les valeurs
sont connues.
Ex  :
VAR
Feux : (orange, rouge, vert) ;

Illustration :

Type
Mois = (JANVIER, FÉVRIER, ..., DÉCEMBRE) ;
--- Attention : une machine ne comprend pas les « ... ». Il faut donc lister
--- explicitement toutes les valeurs possibles.
Jour = (LUNDI, MARDI, MERCREDI, JEUDI, VENDREDI, SAMEDI, DIMANCHE) ;
Couleur = (ROUGE, JAUNE, VERT, BLEU, VIOLET) ; -- quelques couleurs

Variable
M : Mois ;
C : Couleur ;
Debut
m <- MAI ;
c <- ORANGE ; -- impossible car de types différents
3. Type enregistrement

Dans le type enregistrement il s’agit de regrouper des variables de différents types dans une
variable globale appelée variable à tiroirs ou enregistrements.
La syntaxe de déclaration est :

NOM_ENREGISTREMENT = ENREGISTREMENT
Champ1 :type1 ;
-
-
ChampN : typeN ;
FIN ;

Ex  :
ALGORITHME GESTION_ETUDIANT ;
TYPE
Etudiant =ENREGISTREMENT
Nom : CHAINE DE CARACTERE[30] ;
Age : 0..150 ;
Situation : CHAINE DE CARACTERE[10] ;
FIN ;
VAR
LEA : étudiant ;
DEBUT
LEA.nom ← ‘NIAMIEN’ ;
LEA.age ← 20 ;
LEA.situation ← ‘fiancée’ ;
ECRIRE( LEA.nom) ;
ECRIRE (LEA.age) ;
ECRIRE( LEA.situation) ;
FIN.

Remarque :
- dans un enregistrement l’accès à un champ se fait par l’opérateur « . »
Ex  : LEA.nom

- l’on peut faire une opération d’affectation entre deux variables d’un même type
enregistrement.
Ex  : LEA ← BOB

Déclaration d’un tableau d’enregistrement


Var
Classe : TABLEAU[1..5] DE ETUDIANT ;

Exemple de représentation du tableau d’enregistrement CLASSE


CHAP 5 : LA RECURSIVITE

1 . Introduction

La récursivité c’est le fait de donner la possibilité à un objet de s’appeler lui-même.


Généralement cela se traduit de façon mathématique par la notion de récurrence.
Quelquefois, pour éviter les méthodes itératives, l’on utilise la notion de récursivité dont les
définitions de fonctions deviennent plus aisées (plus courtes).

2. Fonctions récursives

Soit la suite de Fibonacci définie par : U0=U1=1 (condition de sortie)


Un=Un-1+Un-2, n>1 (relation de récurrence)

L’on peut calculer la suite de Fibonacci par la méthode itérative, mais dès lors que l’on
découvre une relation de récurrence il est plus judicieux d’utiliser la méthode récursive.
NB : Il faudra aussi déterminer la ou les conditions de sortie ou d’arrêt
L’on peut écrire la fonction suivante :

FONCTION Fibonacci(N :ENTIER) :ENTIER ;
VAR
R :ENTIER ;
DEBUT
SI N≤1 ALORS
R ← 1 ;
SINON
R ← Fibonacci(N-1)+Fibonacci(N-2) ;
Fibonacci ← R ;
FIN ;

De façon simplifiée l’on peut écrire

FONCTION Fibonacci(N :ENTIER) :ENTIER ;
DEBUT
SI N≤1 ALORS
Fibonacci ←1 ;
SINON
Fibonacci ← Fibonacci(N-1)+Fibonacci(N-2) ;
FIN ;

Fibonacci est une fonction qui utilise son propre nom dans la définition d’elle-même. Ainsi, si
l’argument N est plus petit ou égal à 1, on retourne la valeur 1, sinon, le résultat est
Fibonacci(N- 1)+Fibonacci(N-2).
Déroulons la fonction pour une valeur N=3 :

Fibonacci(4) ← Fibonacci(3)+ Fibonacci(2)


←[ Fibonacci(2)+ Fibonacci(1)]+ [Fibonacci(1)+ Fibonacci(0)]
← {Fibonacci(1)+ [Fibonacci(0)+ Fibonacci(1)]}+ [Fibonacci(1)+
Fibonacci(0)]

Or la fonction Fibonacci s’écrit de façon itérative comme suit :


FONCTION Fibonacci(N :ENTIER) :ENTIER ;
VAR
U,V,I :ENTIER ;
U0, V0 :ENTIER ;
DEBUT
U ←1 ; V ← 1 ;
POUR I ← 2 JUSQUA N FAIRE
DEBUT
U0 ← U ; V0←V ;
U ← U0+ V0
V ← U0 ;
FIN ;
Fibonacci ←U ;
FIN ;

La méthode itérative est plus longue et l’écriture récursive s’avère efficace, mais elle est
toujours plus naturelle donc plus esthétique car elle ne fait que suivre les définitions
mathématiques par récurrence. C’est une méthode de programmation puissante bien que la
suite de Fibonacci ait une croissance exponentielle.
L’on peut utiliser la méthode récursive dans plusieurs cas dont :
-le PGCD
-la fonction Factoriel
-CNP
-fonction d’Ackermann
-la tour d’Hanoï
-les fractales …

3. Quelques cas de récursivité

FONCTION Factoriel(N :ENTIER) :ENTIER ;
VAR
R :ENTIER ;
DEBUT
SI ((N==0)ou(N==1)) ALORS
R ← 1 ;
SINON
R ← N*Factoriel(N-1) ;
Factoriel ← R ;
FIN ;

FONCTION cnp(N,P :ENTIER) :ENTIER ;
VAR
R :ENTIER ;
DEBUT
SI((N==0)ou(N==P)) ALORS
R ← 1 ;
SINON
R ← cnp(N-1 ;P+1)+cnp(N-1 ;P) ;
Cnp ← R ;
FIN ;

Vous aimerez peut-être aussi