Exercices corrigés de récursivité en Python ( Série 12)

24 Sep 2017 24 Sep 2017 104169 vues ESSADDOUKI Mostafa 11 min de lecture

Exercices corrigés sur la récursivité

La récursivité est une technique fondamentale en programmation où une fonction s'appelle elle-même pour résoudre un problème en le décomposant en sous-problèmes plus petits. Cette section présente une série d'exercices corrigés pour maîtriser ce concept.

Exercice 1

Longueur d'une chaîne

Niveau : Débutant

Soit une chaîne de caractères, écrire un algorithme récursif permettant de déterminer sa longueur.

Exercice 2

Somme des éléments d'une liste

Niveau : Débutant

Rendre récursive la fonction somme suivante :

def somme(L):
    s = 0
    for val in L:
        s += val
    return s
Exercice 3

Conversion en binaire

Niveau : Intermédiaire

Pour convertir un nombre entier positif N de la base décimale à la base binaire, il faut opérer par des divisions successives du nombre N par 2. Les restes des divisions constituent la représentation binaire.

Ecrire une fonction récursive « Binaire » permettant d'imprimer à l'écran la représentation binaire d'un nombre N.

Exercice 4

Suite de Fibonacci

Niveau : Intermédiaire

La suite de Fibonacci est définie comme suit :

$$ F_n = \begin{cases} 1 & n \le 2 \\ F_{n-1} + F_{n-2} & \text{sinon} \end{cases} $$

Ecrire un programme récursif calculant Fib(n).

Exercice 5

Suite définie par récurrence

Niveau : Intermédiaire

Soit la suite définie par :

$$ U_n = \begin{cases} 1 & n \le 2 \\ 3U_{n-1} + U_{n-2} & \text{sinon} \end{cases} $$

Ecrire un programme récursif permettant de calculer le n-ième terme de la suite.

Exercice 6

Récursivité mutuelle : Pair / Impair

Niveau : Intermédiaire

Un nombre N est pair si (N-1) est impair, et un nombre N est impair si (N-1) est pair.

Ecrire deux fonctions récursives mutuelles pair(N) et impair(N) permettant de savoir si un nombre N est pair et si un nombre N est impair.

Exercice 7

Maximum d'un tableau

Niveau : Intermédiaire

Soit un tableau X de N entiers, écrire une fonction récursive permettant de déterminer le maximum du tableau.

Exercice 8

Vérification de tableau trié

Niveau : Intermédiaire

Un tableau X est trié par ordre croissant si x(i) ≤ x(i+1), ∀ i. Écrire un algorithme récursif permettant de vérifier qu'un tableau X est trié ou non.

Exercice 9

Palindrome

Niveau : Intermédiaire

Un mot est un palindrome si on peut le lire dans les deux sens : de gauche à droite et de droite à gauche. Exemple : KAYAK est un palindrome.

Ecrire une fonction récursive permettant de vérifier si un mot est palindrome.

Exercice 10

Propagation dans une composante connexe (1D)

Niveau : Avancé

Soit un tableau d'entiers contenant des valeurs 0 ou bien 1. On appelle composante connexe une suite contiguë de nombres égaux à 1. On voudrait changer la valeur de chaque composante connexe de telle sorte que la première composante ait la valeur 2, la deuxième ait la valeur 3, la 3ème ait la valeur 4 et ainsi de suite.

Réaliser deux fonctions :

  1. La première fonction n'est pas récursive et a pour rôle de chercher la position d'un 1 dans un tableau.
  2. La deuxième fonction est récursive. Elle reçoit la position d'un 1 dans une séquence et propage une valeur x à toutes les valeurs 1 de la composante connexe.
Exercice 11

Propagation dans une image (2D)

Niveau : Avancé

Soit une image binaire représentée dans une matrice à 2 dimensions. Les éléments m[i][j] sont dits pixels et sont égaux soit à 0 soit à 1. Chaque groupement de pixels égaux à 1 et connectés entre eux forment une composante connexe (figure). L'objectif est de donner une valeur différente de 1 à chaque composante (2 puis 3 puis 4 etc.)

  1. Ecrire une fonction récursive propager permettant de partir d'un point (i,j) situé à l'intérieur d'une composante connexe et de propager une étiquette T à tous les pixels situés à l'intérieur de la composante.
  2. Ecrire une fonction etiqueter permettant d'affecter une étiquette différente à chaque composante connexe.
Points clés à retenir sur la récursivité
  • Toute fonction récursive doit avoir un cas de base qui termine la récursion.
  • Les appels récursifs doivent se rapprocher du cas de base.
  • La récursivité mutuelle implique deux fonctions qui s'appellent l'une l'autre.
  • La diviser pour régner est une technique puissante qui utilise la récursivité.
  • La récursivité peut être coûteuse en mémoire si la profondeur est grande.
Sortie
// La sortie apparaîtra ici…
Prêt · Ctrl+Entrée pour exécuter

Discussion (0)

Soyez le premier à laisser un commentaire !

Laisser un commentaire

Votre commentaire sera visible après modération.