
page 78 de 93
Un certain nombre de problèmes admettent une solution récursive « très élégante » (algorithme
simple à rédiger et à comprendre, mais pas nécessairement efficace). Nous verrons des exemples de
ce genre dans le chapitre sur les recherches et les tris
9
.
Pour certains de ces problèmes, une formulation à l’aide de boucles est très compliquée. Mais une
telle formulation existe toujours. Dans le pire des cas, il est nécessaire de « simuler » l’algorithme
récursif en stockant toutes les valeurs intermédiaires des variables dans un tableau. C’est de cette
façon-là que le programme Delphi lui-même évalue les fonctions récursives ; en effet le langage
machine, seul langage compris par le processeur, est un langage relativement faible qui ne connaît
pas le mécanisme de la récursivité.
8.8 Exercices
Exercice 8-1
a)
Ecrivez un programme qui calcule la fonction d’Ackermann à deux variables naturelles définie
par les égalités :
( ) ( )
( ) ( )( )
≥−−=
≥−=
+=
1,1,,1,
11,10,
1,0
mksimkAckkAckmkAck
ksikAckkAck
mmAck
b)
Essayez cette fonction pour quelques arguments. Par exemple
ack(3,5)=253
,
ack(4,0)=13
,
ack(4,1)=65533
,
Exercice 8-2
Complétez la fonction puissance pour qu’elle calcule aussi correctement des puissances à exposant
entier négatif.
Exercice 8-3
Ecrivez une version récursive de la fonction puissance rapide.
Aide : utilisez les formules
( )
⋅=
=
=
+
aaa
aa
a
nn
n
n
212
22
0
1
Expliquez pour quelles valeurs de
a
et de
n
, l’exécution va s’arrêter et donner un résultat correct.
Exercice 8-4
Ecrivez une version récursive de la fonction pgcd.
Exercice 8-5
Ecrivez un programme récursif qui transforme un nombre binaire en notation décimale.
Exercice 8-6
Ecrivez un programme récursif qui transforme un nombre décimal en notation binaire.
9
Voir par exemple « recherche dichotomique » et « quicksort ».
Comentarios a estos manuales