0% ont trouvé ce document utile (0 vote)
40 vues2 pages

TD 2 Récursivité

Transféré par

hakamabdelkhalek003
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)
40 vues2 pages

TD 2 Récursivité

Transféré par

hakamabdelkhalek003
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

CPGE MP

Récursivité
TD/TP
Exercice 1: L'exponentiation rapide
Écrire une fonction récursive d'entête puissance(x, n) qui retourne la valeur de xn en utilisant la
formule suivante:

Exercice 2: Conversion binaire <---->décimal


Écrire une fonction récursive d'entête Base2(n) qui permet de convertir un entier naturel n dans le
système binaire. La suite binaire est stockée dans une liste.
Exemple :
>>> base2 (6) >>> base2 (15)
[1 , 1 , 0] [1 , 1 , 1,1]
Écrire une fonction récursive d'entête def Base10(a) qui retourne la valeur décimale d'une suite
binaire passée comme argument (on traite deux cas a est un entier et a est une liste) .
Exemple :
>>> base10 ([1,1,0]) >>> base10 (1111)
6 15
Exercice 3: Opérations sur les listes
1. Ecrire une fonction récursive de nom TailleListe qui prend en argument une liste et
retourne le nombre d'éléments qu'elle contient.
2. Ecrire une fonction de nom AffListe qui affiche les éléments de la liste passée en paramètre.
3. Ecrire une fonction récursive de nom AffListeInv qui affiche, dans l'ordre inverse, les
éléments de la liste passée en paramètre.
4. Ecrire une fonction InsOrd qui retourne une liste triée obtenue par l'insertion d'un nouvel
élément à une liste triée.
Remarque:
On s’interdira d’utiliser les méthodes prédéfinies sur liste: append, sort, len, reverse, ....
Exercice 4: Opérations sur les chaînes de caractères
1. Ecrire une fonction récursive strcpy(ch) qui retourne une copie de la chaine de caractères
ch caractère caractère par caractère.
2. Ecrire une fonction récursive strcpm(ch1,ch2) qui permet de comparer deux chaînes de
caractères. Cette fonction retourne 1 si ch1 >ch2, retourne 0 si ch1=ch2 et retourne -1 si
ch1<ch2.
3. Ecrire une fonction récursive anagramme(ch1,ch2) qui retourne True si une chaîne ch1
donnée est anagramme d'une autre chaîne ch2 ou False sinon. Par exemple : ’algorithme’
est anagramme de ’logarithme’ et ’tanger’ est anagramme de ’argent’
Exercice 5: Recherche dichotomique
On rappelle que l'idée de la recherche par dichotomie d'un élément x dans un tableau trié pour l'ordre
croissant est la suivante :
On compare x avec l'élément m du milieu du tableau,
- si x = m : on a trouvé une solution ;
- si x < m : x ne peut pas se trouver après m dans le tableau ; il suffit alors de le rechercher dans la partie
à gauche de m;
- si x > m : x ne peut pas se trouver avant m dans le tableau ; il suffit alors de le rechercher dans la partie
à droite de m;
b) Donner une fonction itérative dico_iteratif qui traduit cet algorithme?
a) Donner une fonction récursive dico_recusif qui traduit cet algorithme ?

Récursivité 1/2
Exercice 6: Récursivité croisée (diagonale de Cantor)

L’ensemble x est dénombrable en numérotant


2
chaque couple (x, y) suivant le procédé suggéré
par la figure:

1- Ecrire une fonction récursive qui retourne le


numéro du point de coordonnées (x, y).

2- Ecrire une fonction récursive qui retourne


coordonnées (x, y) correspondant un numéro de
point donné.

Exercice 7:
On suppose disposer d’une fonction cercle(x, y, r) qui trace à l’écran un cercle de centre
(x, y) de rayon r.
import pylab
F = pylab.gca() # F est une ’figure’
def cercle (x ,y , r ) :
cir = pylab . Circle ([ x , y] , radius=r , fill =False )
F. add_patch(cir)
cercle(0,0,4)
pylab.axis('scaled')
pylab .show()
1- Ecrire la fonction récursive CerclesRec(x, y, r) permettant de tracer le dessin ci-
dessous :

CerclesRec(0,0,5)
pylab.axis('scaled')
pylab .show()
(Chaque cercle est de rayon moitié moindre qu’à la génération précédente).

2- Modifier le programme python précédent pour obtenir cette figure.


On pourra utiliser un paramètre supplémentaire pour définir la fonction récursive (x, y, y, position)
où position (position du voisin) sera l’une des chaînes de caractères: haut, bas, droite, gauche.

Récursivité 2/2

Vous aimerez peut-être aussi