Vous êtes sur la page 1sur 3

Exercices sur la rcursivit

(1)

Ecrire une fonction rcursive qui calcule la factorielle d'un entier naturel n. On
rappelle que n ! = 1 2 3 ... n , si n 1 et 0! = 1 .

(2)

a) Ecrire une fonction rcursive qui calcule la somme des n premiers termes
d'une suite arithmtique de premier terme a et de raison r donnes.
b) Mme exercice en prenant une suite gomtrique.

(3)

Ecrire une fonction rcursive qui calcule le pgcd de deux entiers naturels a et b
par la mthode d'Euclide.

(4)

Ecrire une fonction rcursive qui calcule le ne nombre de Fibonacci. On rappelle


que la suite de Fibonacci est dfinie par : F0 = 1 , F1 = 1 et Fn = Fn 1 + Fn 2 ,
pour tout entier n 2 .

(5)

Ecrire une fonction rcursive qui calcule le coefficient binomial C nk , pour


0k n .

(6)

a) Ecrire une fonction rcursive qui inverse une chane de caractres.


b) Ecrire une procdure rcursive qui inverse une chane de caractres.

(7)

Ecrire une fonction boolenne et rcursive qui teste si une chane de caractres
donne est un anagramme d'une autre chane de caractres donne. Par
exemple: 'algorithme' est un anagramme de 'logarithme'.

(8)

Ecrire une fonction rcursive qui prend en entre une chane de caractres sous
la forme d'une somme algbrique de rels, par ex. ' 1, 37 + 40 10, 08 + 7 244 '
et qui value cette somme algbrique.

(9)

a) Ecrire une fonction rcursive qui retourne la notation binaire d'un entier
naturel. Par exemple : 25 (= 1 24 + 1 23 + 0 22 + 0 21 + 1 20 ) 11001.

b) Ecrire une fonction rcursive qui retourne la notation dcimale d'un nombre
binaire. Par exemple : 11001 25.
(10) Ecrire une procdure rcursive qui permet de transfrer les lettres d'une chane
de caractres dans une liste de type TListbox.
(11) Voici la fonction de Morris :
function morris (m, n: integer): integer;
begin
if m = 0 then result := 1
else result:= morris(m - 1, morris(m, n));
end;
Expliquer pourquoi l'appel de morris(1,0) ne se termine pas !

(12) Ecrire une version rcursive de l'algorithme de Horner permettant d'valuer


un polynme donn p(x ) en un rel donn x 0 . (Le polynme est transfr la
fonction sous forme d'une liste de type TListbox contenant ses coefficients,
suivant les puissances croissantes de la variable.)
(13) Le jeu des Tours de Hano est constitu de trois piquets verticaux, nots 1, 2
et 3 et de n disques superposs de tailles strictement dcroissantes avec un trou
au centre et enfils autour du piquet 1 ; ces disques forment les tours.

Le but du jeu consiste dplacer l'ensemble des disques pour que ceux-ci se
retrouvent enfils autour du piquet 3 en respectant les rgles suivantes :

les disques sont dplacs un par un ;

un disque ne doit pas se retrouver au-dessus d'un disque plus petit. (On
suppose videmment que cette dernire rgle est galement respecte
dans la configuration de dpart).

Le problme a toujours une solution en 2n 1 coups (admis). Il se rsout de


manire rcursive. En effet, supposons le problme rsolu pour n 1 disques c.-d. que l'on sache transfrer n 1 disques depuis le piquet i {1, 2, 3} jusqu'au

piquet j {1, 2, 3} \ {i } en respectant les rgles du jeu. Pour transfrer n disques


du piquet i vers le piquet j, on procde alors comme suit :

on amne les n 1

disques du haut du piquet i sur le piquet

intermdiaire, qui a le numro 6 i j ;

on prend le dernier disque du piquet i et on le met seul en j ;

on ramne les n-1 disques de 6 i j en j.

On demande d'crire une procdure rcursive Hanoi qui permet d'afficher dans
une liste (de type TListox) les mouvements lmentaires accomplir pour
dplacer n disques du piquet i au piquet j.

Vous aimerez peut-être aussi