Fichier de rejeu Close

Indication Close

A propos de... Close

Commentaire Close

Algorithmique - Cours

  • Contexte 1: informatique
  • Contexte 2: pédagogie
  • Contexte 3: enibook
  • Objectif 1: affectation
  • Objectif 2: alternative
  • Objectif 3: itération
  • Objectif 4: définition
  • Objectif 5: appels
  • Objectif 6: récursivité
    • Appels récursifs
    • Récursion versus Itération
    • Exercices
      • Récursivité - Exercices de programmation
Index

Téléchargements

  • Site
  • Sources
  • EniBook 1.618033988
logo

Crédits

© 2008-2017, Enib

Aide

En-tête

MenuContenu
Sommaire,
Téléchargements
Aide sur les outils

Pied de page

ChevronAction
Aller en haut de la page courante
Aller en bas de la page courante
Passer à la page précédente
Passer à la page suivante

Récursivité - Exercices de programmation

Information :

Liens utiles sur la récursivité :

  • Cours

  1. Longueur d'une chaîne
    • Question
    • Solution
    1. Définir une fonction récursive lgr(s) qui détermine la longueur d'une chaîne de caractères s.
    2. Vérifier la fonction précédente en la comparant à la fonction prédéfinie len(s).
    Votre réponse :
    1. AAV4_REC: Résultat

      Utiliser l'interpréteur Python ci-dessous pour programmer les fonctions demandées.

      python : essai.py
      
          
      >>>
      Output
      
                      

      Interpréteur

      MenuAction
      Ré-initialiser les sorties
      Faire apparaître le menu d'aide
      Interpréter le programme

      Editeur

      MenuRaccouciAction
      Ctrl+N Initialiser l'éditeur
      Ctrl+O Charger le contenu d'un fichier dans l'éditeur
      Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
      Ctrl+P Imprimer le contenu de l'éditeur
      Ctrl+Z Annuler la dernière modification
      Maj+Ctrl+Z Rétablir la modification précedente
      Ctrl+F Chercher une expression dans l'éditeur
      Maj+Ctrl+F Chercher et remplacer une expression par une autre
      F10 Ouvrir une documentation du langage

      RaccourciAction
      F1 Afficher cette aide
      Tab Indenter la sélection
      Maj+Tab Désindenter la sélection
      Ctrl+A Sélectionner le contenu de l'éditeur
      Ctrl+C Copier la sélection dans le presse-papier
      Ctrl+V Remplacer la sélection par le contenu du presse-papier
      Ctrl+X Supprimer la sélection et la copier dans le presse-papier
      Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    2. AAV4_REC: Vérification

      Appliquer cette technique au résultat proposé.

      Si cette technique nécessite d'être implémentée en Python, le faire dans l'interpréteur Python ci-dessus (cf. Résultat), sinon développer la technique de vérification dans l'éditeur de texte ci-dessous.

      Zone de saisie de texte

      ClavierAction
      F1Afficher une aide technique
      F2Afficher une aide pédagogique
      Ctrl-ATout sélectionner
      Ctrl-CCopier la sélection dans le presse-papier
      Ctrl-VCopier le presse-papier dans la sélection
      Ctrl-XCouper la sélection et la copier dans le presse-papier
      Ctrl-ZAnnuler la modification
      Maj-Ctrl-ZRétablir la modification

      MenuAction
      Ré-initialiser les sorties
      Faire apparaître le menu d'aide
      Valider la zone de saisie
      Initialiser la zone de saisie
      Charger le contenu d'un fichier dans la zone de saisie
      Sauvegarder le contenu de la zone de saisie dans un fichier
      Imprimer le contenu de la zone de saisie
    Une solution possible :
    1. AAV4_REC: Répondre explicitement à la question posée

      Les fonctions demandées sont définies ci-dessous.

      python : recursivite-type-string-1.py
      
          
      >>>
      Output
      
                      

      Interpréteur

      MenuAction
      Ré-initialiser les sorties
      Faire apparaître le menu d'aide
      Interpréter le programme

      Editeur

      MenuRaccouciAction
      Ctrl+N Initialiser l'éditeur
      Ctrl+O Charger le contenu d'un fichier dans l'éditeur
      Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
      Ctrl+P Imprimer le contenu de l'éditeur
      Ctrl+Z Annuler la dernière modification
      Maj+Ctrl+Z Rétablir la modification précedente
      Ctrl+F Chercher une expression dans l'éditeur
      Maj+Ctrl+F Chercher et remplacer une expression par une autre
      F10 Ouvrir une documentation du langage

      RaccourciAction
      F1 Afficher cette aide
      Tab Indenter la sélection
      Maj+Tab Désindenter la sélection
      Ctrl+A Sélectionner le contenu de l'éditeur
      Ctrl+C Copier la sélection dans le presse-papier
      Ctrl+V Remplacer la sélection par le contenu du presse-papier
      Ctrl+X Supprimer la sélection et la copier dans le presse-papier
      Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    2. AAV4_REC: Choisir et appliquer une technique de vérification

      Une vérification par jeux de tests est proposée dans l'énoncé:

      tests = ["","z","bonjour","anticonstitutionnellement"]
      for t in tests :
          r = lgr(t)
          verif = (r == len(t))
          print t,r,verif
      
  2. Palindrome
    • Question
    • Solution
    1. Définir une fonction récursive qui détermine l'inverse d'une chaîne de caractères s.

    2. En utilisant la fonction récursive précédente, définir une fonction qui teste si une chaîne de caractères est un palindrome.

      Exemples de palindromes : "kayak", "laval", "mon nom", "non", "ressasser", "serres"

    Votre réponse :
    1. AAV4_REC: Résultat

      Utiliser l'interpréteur Python ci-dessous pour programmer les fonctions demandées.

      python : essai.py
      
          
      >>>
      Output
      
                      

      Interpréteur

      MenuAction
      Ré-initialiser les sorties
      Faire apparaître le menu d'aide
      Interpréter le programme

      Editeur

      MenuRaccouciAction
      Ctrl+N Initialiser l'éditeur
      Ctrl+O Charger le contenu d'un fichier dans l'éditeur
      Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
      Ctrl+P Imprimer le contenu de l'éditeur
      Ctrl+Z Annuler la dernière modification
      Maj+Ctrl+Z Rétablir la modification précedente
      Ctrl+F Chercher une expression dans l'éditeur
      Maj+Ctrl+F Chercher et remplacer une expression par une autre
      F10 Ouvrir une documentation du langage

      RaccourciAction
      F1 Afficher cette aide
      Tab Indenter la sélection
      Maj+Tab Désindenter la sélection
      Ctrl+A Sélectionner le contenu de l'éditeur
      Ctrl+C Copier la sélection dans le presse-papier
      Ctrl+V Remplacer la sélection par le contenu du presse-papier
      Ctrl+X Supprimer la sélection et la copier dans le presse-papier
      Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    2. AAV4_REC: Vérification

      Appliquer cette technique au résultat proposé.

      Si cette technique nécessite d'être implémentée en Python, le faire dans l'interpréteur Python ci-dessus (cf. Résultat), sinon développer la technique de vérification dans l'éditeur de texte ci-dessous.

      Zone de saisie de texte

      ClavierAction
      F1Afficher une aide technique
      F2Afficher une aide pédagogique
      Ctrl-ATout sélectionner
      Ctrl-CCopier la sélection dans le presse-papier
      Ctrl-VCopier le presse-papier dans la sélection
      Ctrl-XCouper la sélection et la copier dans le presse-papier
      Ctrl-ZAnnuler la modification
      Maj-Ctrl-ZRétablir la modification

      MenuAction
      Ré-initialiser les sorties
      Faire apparaître le menu d'aide
      Valider la zone de saisie
      Initialiser la zone de saisie
      Charger le contenu d'un fichier dans la zone de saisie
      Sauvegarder le contenu de la zone de saisie dans un fichier
      Imprimer le contenu de la zone de saisie
    Une solution possible :
    1. AAV4_REC: Répondre explicitement à la question posée

      Les fonctions demandées sont définies ci-dessous.

      python : recursivite-type-string-2.py
      
          
      >>>
      Output
      
                      

      Interpréteur

      MenuAction
      Ré-initialiser les sorties
      Faire apparaître le menu d'aide
      Interpréter le programme

      Editeur

      MenuRaccouciAction
      Ctrl+N Initialiser l'éditeur
      Ctrl+O Charger le contenu d'un fichier dans l'éditeur
      Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
      Ctrl+P Imprimer le contenu de l'éditeur
      Ctrl+Z Annuler la dernière modification
      Maj+Ctrl+Z Rétablir la modification précedente
      Ctrl+F Chercher une expression dans l'éditeur
      Maj+Ctrl+F Chercher et remplacer une expression par une autre
      F10 Ouvrir une documentation du langage

      RaccourciAction
      F1 Afficher cette aide
      Tab Indenter la sélection
      Maj+Tab Désindenter la sélection
      Ctrl+A Sélectionner le contenu de l'éditeur
      Ctrl+C Copier la sélection dans le presse-papier
      Ctrl+V Remplacer la sélection par le contenu du presse-papier
      Ctrl+X Supprimer la sélection et la copier dans le presse-papier
      Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    2. AAV4_REC: Choisir et appliquer une technique de vérification

      Une vérification par jeux de tests est proposée dans l'énoncé:

      tests = [("oui",False),("non",True),("kayak",True),
               ("bonjour",False),("laval",True),("mon nom",True)]
      for (e,s) in tests :
          r = palindrome(e)
          verif = (r == s)
          print e,r,verif
      
  3. Recherche séquentielle
    • Question
    • Solution
    1. Définir une fonction récursive recherche(t,x,d,f) qui retourne le rang de la première occurrence de x dans la séquence t entre les indices d inclus et f exclu, -1 si pas d'occurrence de x dans t.
    2. Proposer une version itérative de la recherche séquentielle.
    3. Vérifier le fonctionnement des fonctions précédentes avec l'appel prédéfini t.index(x,d,f) qui retourne le rang de la première occurrence de x dans la séquence t si x est dans t.
    Votre réponse :
    1. AAV4_REC: Résultat

      Utiliser l'interpréteur Python ci-dessous pour programmer les fonctions demandées.

      python : essai.py
      
          
      >>>
      Output
      
                      

      Interpréteur

      MenuAction
      Ré-initialiser les sorties
      Faire apparaître le menu d'aide
      Interpréter le programme

      Editeur

      MenuRaccouciAction
      Ctrl+N Initialiser l'éditeur
      Ctrl+O Charger le contenu d'un fichier dans l'éditeur
      Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
      Ctrl+P Imprimer le contenu de l'éditeur
      Ctrl+Z Annuler la dernière modification
      Maj+Ctrl+Z Rétablir la modification précedente
      Ctrl+F Chercher une expression dans l'éditeur
      Maj+Ctrl+F Chercher et remplacer une expression par une autre
      F10 Ouvrir une documentation du langage

      RaccourciAction
      F1 Afficher cette aide
      Tab Indenter la sélection
      Maj+Tab Désindenter la sélection
      Ctrl+A Sélectionner le contenu de l'éditeur
      Ctrl+C Copier la sélection dans le presse-papier
      Ctrl+V Remplacer la sélection par le contenu du presse-papier
      Ctrl+X Supprimer la sélection et la copier dans le presse-papier
      Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    2. AAV4_REC: Vérification

      Appliquer cette technique au résultat proposé.

      Si cette technique nécessite d'être implémentée en Python, le faire dans l'interpréteur Python ci-dessus (cf. Résultat), sinon développer la technique de vérification dans l'éditeur de texte ci-dessous.

      Zone de saisie de texte

      ClavierAction
      F1Afficher une aide technique
      F2Afficher une aide pédagogique
      Ctrl-ATout sélectionner
      Ctrl-CCopier la sélection dans le presse-papier
      Ctrl-VCopier le presse-papier dans la sélection
      Ctrl-XCouper la sélection et la copier dans le presse-papier
      Ctrl-ZAnnuler la modification
      Maj-Ctrl-ZRétablir la modification

      MenuAction
      Ré-initialiser les sorties
      Faire apparaître le menu d'aide
      Valider la zone de saisie
      Initialiser la zone de saisie
      Charger le contenu d'un fichier dans la zone de saisie
      Sauvegarder le contenu de la zone de saisie dans un fichier
      Imprimer le contenu de la zone de saisie
    Une solution possible :
    1. AAV4_REC: Répondre explicitement à la question posée

      Les fonctions demandées sont définies ci-dessous.

      python : recursivite-type-list-1.py
      
          
      >>>
      Output
      
                      

      Interpréteur

      MenuAction
      Ré-initialiser les sorties
      Faire apparaître le menu d'aide
      Interpréter le programme

      Editeur

      MenuRaccouciAction
      Ctrl+N Initialiser l'éditeur
      Ctrl+O Charger le contenu d'un fichier dans l'éditeur
      Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
      Ctrl+P Imprimer le contenu de l'éditeur
      Ctrl+Z Annuler la dernière modification
      Maj+Ctrl+Z Rétablir la modification précedente
      Ctrl+F Chercher une expression dans l'éditeur
      Maj+Ctrl+F Chercher et remplacer une expression par une autre
      F10 Ouvrir une documentation du langage

      RaccourciAction
      F1 Afficher cette aide
      Tab Indenter la sélection
      Maj+Tab Désindenter la sélection
      Ctrl+A Sélectionner le contenu de l'éditeur
      Ctrl+C Copier la sélection dans le presse-papier
      Ctrl+V Remplacer la sélection par le contenu du presse-papier
      Ctrl+X Supprimer la sélection et la copier dans le presse-papier
      Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    2. AAV4_REC: Choisir et appliquer une technique de vérification

      Une vérification par jeux de tests est proposée dans l'énoncé:

      tests = [("bonjour","o",0,5,1),("","e",2,7,-1),("test","x",0,3,-1),
               ((),"e",2,7,-1),((1,2,3,2,1),2,0,5,1),(('2','1'),1,0,2,-1),
               ([],[],0,1,-1),([1,2,3,3,2,1],3,1,5,2),([[],[1,2]],1,0,2,-1)]
      for (e1,e2,e3,e4,s1) in tests :
          r1 = recherche(e1,e2,e3,e4)
          r2 = recherche_iteratif(e1,e2,e3,e4)
          verif1 = (r1 == s1)
          verif2 = (r2 == s1)
          if e2 in e1 :
              verif1 = verif1 and r1 == e1.index(e2,e3,e4)
              verif2 = verif2 and r2 == e1.index(e2,e3,e4)
          else :
              verif1 = verif1 and (r1 == -1)
              verif2 = verif2 and (r2 == -1)
          print e1,e2,e3,e4,r1,r2,verif1,verif2
      
  4. Recherche dichotomique
    • Question
    • Solution
    1. Définir une fonction récursive recherche_dichotomique(t,x,d,f) qui retourne le rang de la première occurrence de x dans la séquence déjà triée par ordre croissant t entre les indices d inclus et f exclu, -1 si pas d'occurrence de x dans t.

      On utilisera une méthode par dichotomie pour profiter du fait que la liste t est triée.

    2. Proposer une version itérative de la recherche dichotomique.

    3. Vérifier le fonctionnement des fonctions précédentes avec l'appel prédéfini t.index(x,d,f) qui retourne le rang de la première occurrence de x dans la séquence t si x est dans t.

    Votre réponse :
    1. AAV4_REC: Résultat

      Utiliser l'interpréteur Python ci-dessous pour programmer les fonctions demandées.

      python : essai.py
      
          
      >>>
      Output
      
                      

      Interpréteur

      MenuAction
      Ré-initialiser les sorties
      Faire apparaître le menu d'aide
      Interpréter le programme

      Editeur

      MenuRaccouciAction
      Ctrl+N Initialiser l'éditeur
      Ctrl+O Charger le contenu d'un fichier dans l'éditeur
      Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
      Ctrl+P Imprimer le contenu de l'éditeur
      Ctrl+Z Annuler la dernière modification
      Maj+Ctrl+Z Rétablir la modification précedente
      Ctrl+F Chercher une expression dans l'éditeur
      Maj+Ctrl+F Chercher et remplacer une expression par une autre
      F10 Ouvrir une documentation du langage

      RaccourciAction
      F1 Afficher cette aide
      Tab Indenter la sélection
      Maj+Tab Désindenter la sélection
      Ctrl+A Sélectionner le contenu de l'éditeur
      Ctrl+C Copier la sélection dans le presse-papier
      Ctrl+V Remplacer la sélection par le contenu du presse-papier
      Ctrl+X Supprimer la sélection et la copier dans le presse-papier
      Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    2. AAV4_REC: Vérification

      Appliquer cette technique au résultat proposé.

      Si cette technique nécessite d'être implémentée en Python, le faire dans l'interpréteur Python ci-dessus (cf. Résultat), sinon développer la technique de vérification dans l'éditeur de texte ci-dessous.

      Zone de saisie de texte

      ClavierAction
      F1Afficher une aide technique
      F2Afficher une aide pédagogique
      Ctrl-ATout sélectionner
      Ctrl-CCopier la sélection dans le presse-papier
      Ctrl-VCopier le presse-papier dans la sélection
      Ctrl-XCouper la sélection et la copier dans le presse-papier
      Ctrl-ZAnnuler la modification
      Maj-Ctrl-ZRétablir la modification

      MenuAction
      Ré-initialiser les sorties
      Faire apparaître le menu d'aide
      Valider la zone de saisie
      Initialiser la zone de saisie
      Charger le contenu d'un fichier dans la zone de saisie
      Sauvegarder le contenu de la zone de saisie dans un fichier
      Imprimer le contenu de la zone de saisie
    Une solution possible :
    1. AAV4_REC: Répondre explicitement à la question posée

      Les fonctions demandées sont définies ci-dessous.

      python : recursivite-type-list-2.py
      
          
      >>>
      Output
      
                      

      Interpréteur

      MenuAction
      Ré-initialiser les sorties
      Faire apparaître le menu d'aide
      Interpréter le programme

      Editeur

      MenuRaccouciAction
      Ctrl+N Initialiser l'éditeur
      Ctrl+O Charger le contenu d'un fichier dans l'éditeur
      Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
      Ctrl+P Imprimer le contenu de l'éditeur
      Ctrl+Z Annuler la dernière modification
      Maj+Ctrl+Z Rétablir la modification précedente
      Ctrl+F Chercher une expression dans l'éditeur
      Maj+Ctrl+F Chercher et remplacer une expression par une autre
      F10 Ouvrir une documentation du langage

      RaccourciAction
      F1 Afficher cette aide
      Tab Indenter la sélection
      Maj+Tab Désindenter la sélection
      Ctrl+A Sélectionner le contenu de l'éditeur
      Ctrl+C Copier la sélection dans le presse-papier
      Ctrl+V Remplacer la sélection par le contenu du presse-papier
      Ctrl+X Supprimer la sélection et la copier dans le presse-papier
      Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    2. AAV4_REC: Choisir et appliquer une technique de vérification

      Une vérification par jeux de tests est proposée dans l'énoncé:

      tests = [("abcdef","b",0,5,1),("","e",2,7,-1),("aeiou","x",0,3,-1),
               ((),"e",2,7,-1),((1,2,2,3),2,0,5,1),(('1','2'),1,0,2,-1),
               ([],[],0,1,-1),([1,2,3,3,4,5],3,1,5,2),([[],[1,2]],1,0,2,-1)]
      for (e1,e2,e3,e4,s1) in tests :
          r1 = recherche_dichotomique(e1,e2,e3,e4)
          r2 = recherche_dichotomique_iteratif(e1,e2,e3,e4)
          verif1 = (r1 == s1)
          verif2 = (r2 == s1)
          if e2 in e1 :
              verif1 = verif1 and r1 == e1.index(e2,e3,e4)
              verif2 = verif2 and r2 == e1.index(e2,e3,e4)
          else :
              verif1 = verif1 and (r1 == -1)
              verif2 = verif2 and (r2 == -1)
          print e1,e2,e3,e4,r1,r2,verif1,verif2
      
  5. Tri par sélection
    • Question
    • Solution

    Le tri par sélection d'une liste consiste à rechercher le minimum de la liste à trier, de le mettre en début de liste en l'échangeant avec le premier élément et de recommencer sur le reste de la liste.

    _images/recursivite-type-list-3.png
    1. Définir une fonction récursive qui détermine le minimum de la liste t entre les indices d inclus et f exclu.
    2. Définir une fonction récursive tri_selection(t,d,f) qui trie « sur place » la liste t par ordre croissant entre les indices d inclus et f exclu.
    3. Proposer une version itérative du minimum et du tri par sélection.
    4. Vérifier le fonctionnement des fonctions précédentes avec les appels prédéfinis min(t) qui retourne le minimum de la liste t et t.sort() qui trie la liste t « sur place ».
    Tris d'une liste
    4 Tris

    1. tri par sélection

    _images/recursivite-type-list-3.png

    2. tri par insertion

    _images/recursivite-type-list-4.png

    3. tri fusion

    _images/recursivite-type-list-5.png

    4. tri rapide

    _images/recursivite-type-list-6.png
    Votre réponse :
    1. AAV4_REC: Résultat

      Utiliser l'interpréteur Python ci-dessous pour programmer les fonctions demandées.

      python : essai.py
      
          
      >>>
      Output
      
                      

      Interpréteur

      MenuAction
      Ré-initialiser les sorties
      Faire apparaître le menu d'aide
      Interpréter le programme

      Editeur

      MenuRaccouciAction
      Ctrl+N Initialiser l'éditeur
      Ctrl+O Charger le contenu d'un fichier dans l'éditeur
      Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
      Ctrl+P Imprimer le contenu de l'éditeur
      Ctrl+Z Annuler la dernière modification
      Maj+Ctrl+Z Rétablir la modification précedente
      Ctrl+F Chercher une expression dans l'éditeur
      Maj+Ctrl+F Chercher et remplacer une expression par une autre
      F10 Ouvrir une documentation du langage

      RaccourciAction
      F1 Afficher cette aide
      Tab Indenter la sélection
      Maj+Tab Désindenter la sélection
      Ctrl+A Sélectionner le contenu de l'éditeur
      Ctrl+C Copier la sélection dans le presse-papier
      Ctrl+V Remplacer la sélection par le contenu du presse-papier
      Ctrl+X Supprimer la sélection et la copier dans le presse-papier
      Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    2. AAV4_REC: Vérification

      Appliquer cette technique au résultat proposé.

      Si cette technique nécessite d'être implémentée en Python, le faire dans l'interpréteur Python ci-dessus (cf. Résultat), sinon développer la technique de vérification dans l'éditeur de texte ci-dessous.

      Zone de saisie de texte

      ClavierAction
      F1Afficher une aide technique
      F2Afficher une aide pédagogique
      Ctrl-ATout sélectionner
      Ctrl-CCopier la sélection dans le presse-papier
      Ctrl-VCopier le presse-papier dans la sélection
      Ctrl-XCouper la sélection et la copier dans le presse-papier
      Ctrl-ZAnnuler la modification
      Maj-Ctrl-ZRétablir la modification

      MenuAction
      Ré-initialiser les sorties
      Faire apparaître le menu d'aide
      Valider la zone de saisie
      Initialiser la zone de saisie
      Charger le contenu d'un fichier dans la zone de saisie
      Sauvegarder le contenu de la zone de saisie dans un fichier
      Imprimer le contenu de la zone de saisie
    Une solution possible :
    1. AAV4_REC: Répondre explicitement à la question posée

      Les fonctions demandées sont définies ci-dessous.

      python : recursivite-type-list-3.py
      
          
      >>>
      Output
      
                      

      Interpréteur

      MenuAction
      Ré-initialiser les sorties
      Faire apparaître le menu d'aide
      Interpréter le programme

      Editeur

      MenuRaccouciAction
      Ctrl+N Initialiser l'éditeur
      Ctrl+O Charger le contenu d'un fichier dans l'éditeur
      Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
      Ctrl+P Imprimer le contenu de l'éditeur
      Ctrl+Z Annuler la dernière modification
      Maj+Ctrl+Z Rétablir la modification précedente
      Ctrl+F Chercher une expression dans l'éditeur
      Maj+Ctrl+F Chercher et remplacer une expression par une autre
      F10 Ouvrir une documentation du langage

      RaccourciAction
      F1 Afficher cette aide
      Tab Indenter la sélection
      Maj+Tab Désindenter la sélection
      Ctrl+A Sélectionner le contenu de l'éditeur
      Ctrl+C Copier la sélection dans le presse-papier
      Ctrl+V Remplacer la sélection par le contenu du presse-papier
      Ctrl+X Supprimer la sélection et la copier dans le presse-papier
      Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur

      On constate que les fonctions tri_selection(t,d,f) et tri_selection_iteratif(t,d,f) partage évidemment la même spécification, seules les implémentations diffèrent : l'une est récursive, l'autre itérative.

    2. AAV4_REC: Choisir et appliquer une technique de vérification

      Une vérification par jeux de tests est proposée dans l'énoncé:

      print 'test minimum et minimum_iteratif'
      tests = [([1,2,3],0,2,0),([3,2,1],1,3,2),
               (['r','e','d','a'],0,3,2)]
      for (e1,e2,e3,s1) in tests :
          r1 = minimum(e1,e2,e3)
          r2 = minimum_iteratif(e1,e2,e3)
          verif1 = (r1 == s1 and e1[r1] == min(e1[e2:e3]))
          verif2 = (r2 == s1 and e1[r2] == min(e1[e2:e3]))
          print e1,e2,e3,r1,r2,verif1,verif2
      
      print '\ntest tri_selection'
      tests = [([],-2,-5,[]),([1,2,3],0,3,[1,2,3]),([3,2,1],1,25,[3,1,2]),
               (['r','e','d','a'],0,3,['d','e','r','a'])]
      for (e1,e2,e3,s1) in tests :
          e10 = e1[e2:e3]
          e10.sort()
          e10 = e1[0:e2] + e10 + e1[e3:]
          print e1,e10,
          tri_selection(e1,e2,e3)
          verif1 = (e1 == s1 and e10 == s1)
          print e1,verif1
      
      print '\ntest tri_selection_iteratif'
      tests = [([],-2,-5,[]),([1,2,3],0,3,[1,2,3]),([3,2,1],1,25,[3,1,2]),
               (['r','e','d','a'],0,3,['d','e','r','a'])]
      for (e1,e2,e3,s1) in tests :
          e10 = e1[e2:e3]
          e10.sort()
          e10 = e1[0:e2] + e10 + e1[e3:]
          print e1,e10,
          tri_selection_iteratif(e1,e2,e3)
          verif2 = (e1 == s1 and e10 == s1)
          print e1,verif2
      
  6. Tri par insertion
    • Question
    • Solution

    Dans le tri par insertion, on trie successivement les premiers éléments de la liste : à la \(i^{\grave eme}\) étape, on insère le \(i^{\grave eme}\) élément à son rang parmi les \(i-1\) éléments précédents qui sont déjà triés entre eux.

    _images/recursivite-type-list-4.png
    1. Définir une fonction récursive inserer(t,d,f) qui déplace l'élément t[f] d'une liste t entre les indices d et f en conservant l'ordre croissant au sein de la liste t déjà triée entre les indices d inclus et f exclu.
    2. Définir une fonction récursive tri_insertion(t,d,f) qui trie « sur place » la liste t par ordre croissant entre les indices d inclus et f exclu.
    3. Proposer une version itérative de l'insertion et du tri par insertion.
    4. Vérifier le fonctionnement du tri en comparant à l'appel prédéfini t.sort() qui trie la liste t « sur place ».
    Tris d'une liste
    4 Tris

    1. tri par sélection

    _images/recursivite-type-list-3.png

    2. tri par insertion

    _images/recursivite-type-list-4.png

    3. tri fusion

    _images/recursivite-type-list-5.png

    4. tri rapide

    _images/recursivite-type-list-6.png
    Votre réponse :
    1. AAV4_REC: Résultat

      Utiliser l'interpréteur Python ci-dessous pour programmer les fonctions demandées.

      python : essai.py
      
          
      >>>
      Output
      
                      

      Interpréteur

      MenuAction
      Ré-initialiser les sorties
      Faire apparaître le menu d'aide
      Interpréter le programme

      Editeur

      MenuRaccouciAction
      Ctrl+N Initialiser l'éditeur
      Ctrl+O Charger le contenu d'un fichier dans l'éditeur
      Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
      Ctrl+P Imprimer le contenu de l'éditeur
      Ctrl+Z Annuler la dernière modification
      Maj+Ctrl+Z Rétablir la modification précedente
      Ctrl+F Chercher une expression dans l'éditeur
      Maj+Ctrl+F Chercher et remplacer une expression par une autre
      F10 Ouvrir une documentation du langage

      RaccourciAction
      F1 Afficher cette aide
      Tab Indenter la sélection
      Maj+Tab Désindenter la sélection
      Ctrl+A Sélectionner le contenu de l'éditeur
      Ctrl+C Copier la sélection dans le presse-papier
      Ctrl+V Remplacer la sélection par le contenu du presse-papier
      Ctrl+X Supprimer la sélection et la copier dans le presse-papier
      Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    2. AAV4_REC: Vérification

      Appliquer cette technique au résultat proposé.

      Si cette technique nécessite d'être implémentée en Python, le faire dans l'interpréteur Python ci-dessus (cf. Résultat), sinon développer la technique de vérification dans l'éditeur de texte ci-dessous.

      Zone de saisie de texte

      ClavierAction
      F1Afficher une aide technique
      F2Afficher une aide pédagogique
      Ctrl-ATout sélectionner
      Ctrl-CCopier la sélection dans le presse-papier
      Ctrl-VCopier le presse-papier dans la sélection
      Ctrl-XCouper la sélection et la copier dans le presse-papier
      Ctrl-ZAnnuler la modification
      Maj-Ctrl-ZRétablir la modification

      MenuAction
      Ré-initialiser les sorties
      Faire apparaître le menu d'aide
      Valider la zone de saisie
      Initialiser la zone de saisie
      Charger le contenu d'un fichier dans la zone de saisie
      Sauvegarder le contenu de la zone de saisie dans un fichier
      Imprimer le contenu de la zone de saisie
    Une solution possible :
    1. AAV4_REC: Répondre explicitement à la question posée

      Les fonctions demandées sont définies ci-dessous.

      python : recursivite-type-list-4.py
      
          
      >>>
      Output
      
                      

      Interpréteur

      MenuAction
      Ré-initialiser les sorties
      Faire apparaître le menu d'aide
      Interpréter le programme

      Editeur

      MenuRaccouciAction
      Ctrl+N Initialiser l'éditeur
      Ctrl+O Charger le contenu d'un fichier dans l'éditeur
      Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
      Ctrl+P Imprimer le contenu de l'éditeur
      Ctrl+Z Annuler la dernière modification
      Maj+Ctrl+Z Rétablir la modification précedente
      Ctrl+F Chercher une expression dans l'éditeur
      Maj+Ctrl+F Chercher et remplacer une expression par une autre
      F10 Ouvrir une documentation du langage

      RaccourciAction
      F1 Afficher cette aide
      Tab Indenter la sélection
      Maj+Tab Désindenter la sélection
      Ctrl+A Sélectionner le contenu de l'éditeur
      Ctrl+C Copier la sélection dans le presse-papier
      Ctrl+V Remplacer la sélection par le contenu du presse-papier
      Ctrl+X Supprimer la sélection et la copier dans le presse-papier
      Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur

      On constate que les fonctions tri_insertion(t,d,f) et tri_insertion_iteratif(t,d,f) partage évidemment la même spécification, seules les implémentations diffèrent : l'une est récursive, l'autre itérative.

    2. AAV4_REC: Choisir et appliquer une technique de vérification

      Une vérification par jeux de tests est proposée dans l'énoncé:

      print 'test inserer'
      tests = [([],-2,-5,[]),([1,2,3],0,2,[1,2,3]),([3,2,1],1,2,[3,1,2]),
               (['r','e','d','a'],1,2,['r','d','e','a'])]
      for (e1,e2,e3,s1) in tests :
          print e1,
          inserer(e1,e2,e3)
          verif = (e1 == s1)
          print e1,verif
      
      print '\ntest tri_insertion'
      tests = [([],-2,-5,[]),([1,2,3],0,3,[1,2,3]),([3,2,1],1,25,[3,1,2]),
               (['r','e','d','a'],0,3,['d','e','r','a'])]
      for (e1,e2,e3,s1) in tests :
          e10 = e1[e2:e3]
          e10.sort()
          e10 = e1[0:e2] + e10 + e1[e3:]
          print e1,e10,
          tri_insertion(e1,e2,e3)
          verif1 = (e1 == s1 and e10 == s1)
          print e1,verif1
      
      print '\ntest tri_insertion_iteratif'
      tests = [([],-2,-5,[]),([1,2,3],0,3,[1,2,3]),([3,2,1],1,25,[3,1,2]),
               (['r','e','d','a'],0,3,['d','e','r','a'])]
      for (e1,e2,e3,s1) in tests :
          e10 = e1[e2:e3]
          e10.sort()
          e10 = e1[0:e2] + e10 + e1[e3:]
          print e1,e10,
          tri_insertion_iteratif(e1,e2,e3)
          verif2 = (e1 == s1 and e10 == s1)
          print e1,verif2
      
  7. Tri fusion
    • Question
    • Solution

    Dans le tri fusion, on partage la liste à trier en deux sous-listes que l'on trie séparément, et on interclasse (on fusionne) ces deux sous-listes triées.

    La fusion consiste donc à construire, à partir des deux sous-listes triées (la première de l'indice d inclus à l'indice m exclu, la deuxième de l'indice m inclus à l'indice f exclu) une liste elle-même triée des indices d inclus à f exclu et contenant l'ensemble des éléments des deux sous-listes d'origine.

    _images/recursivite-type-list-5.png
    1. Définir une fonction récursive fusion(t,d,m,f) qui fusionne les deux parties triées de la liste t (entre d inclus et m exclu d'une part, et m inclus et f exclu d'autre part) de telle manière que la liste t soit triée entre les indices d inclus et f exclu.
    2. Définir une fonction récursive tri_fusion(t,d,f) qui trie « sur place » la liste t par ordre croissant entre les indices d inclus et f exclu.
    3. Vérifier le fonctionnement du tri fusion en le comparant à l'appel prédéfini t.sort() qui trie la liste t « sur place ».
    Tris d'une liste
    4 Tris

    1. tri par sélection

    _images/recursivite-type-list-3.png

    2. tri par insertion

    _images/recursivite-type-list-4.png

    3. tri fusion

    _images/recursivite-type-list-5.png

    4. tri rapide

    _images/recursivite-type-list-6.png
    Votre réponse :
    1. AAV4_REC: Résultat

      Utiliser l'interpréteur Python ci-dessous pour programmer les fonctions demandées.

      python : essai.py
      
          
      >>>
      Output
      
                      

      Interpréteur

      MenuAction
      Ré-initialiser les sorties
      Faire apparaître le menu d'aide
      Interpréter le programme

      Editeur

      MenuRaccouciAction
      Ctrl+N Initialiser l'éditeur
      Ctrl+O Charger le contenu d'un fichier dans l'éditeur
      Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
      Ctrl+P Imprimer le contenu de l'éditeur
      Ctrl+Z Annuler la dernière modification
      Maj+Ctrl+Z Rétablir la modification précedente
      Ctrl+F Chercher une expression dans l'éditeur
      Maj+Ctrl+F Chercher et remplacer une expression par une autre
      F10 Ouvrir une documentation du langage

      RaccourciAction
      F1 Afficher cette aide
      Tab Indenter la sélection
      Maj+Tab Désindenter la sélection
      Ctrl+A Sélectionner le contenu de l'éditeur
      Ctrl+C Copier la sélection dans le presse-papier
      Ctrl+V Remplacer la sélection par le contenu du presse-papier
      Ctrl+X Supprimer la sélection et la copier dans le presse-papier
      Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    2. AAV4_REC: Vérification

      Appliquer cette technique au résultat proposé.

      Si cette technique nécessite d'être implémentée en Python, le faire dans l'interpréteur Python ci-dessus (cf. Résultat), sinon développer la technique de vérification dans l'éditeur de texte ci-dessous.

      Zone de saisie de texte

      ClavierAction
      F1Afficher une aide technique
      F2Afficher une aide pédagogique
      Ctrl-ATout sélectionner
      Ctrl-CCopier la sélection dans le presse-papier
      Ctrl-VCopier le presse-papier dans la sélection
      Ctrl-XCouper la sélection et la copier dans le presse-papier
      Ctrl-ZAnnuler la modification
      Maj-Ctrl-ZRétablir la modification

      MenuAction
      Ré-initialiser les sorties
      Faire apparaître le menu d'aide
      Valider la zone de saisie
      Initialiser la zone de saisie
      Charger le contenu d'un fichier dans la zone de saisie
      Sauvegarder le contenu de la zone de saisie dans un fichier
      Imprimer le contenu de la zone de saisie
    Une solution possible :
    1. AAV4_REC: Répondre explicitement à la question posée

      Les fonctions demandées sont définies ci-dessous.

      python : recursivite-type-list-5.py
      
          
      >>>
      Output
      
                      

      Interpréteur

      MenuAction
      Ré-initialiser les sorties
      Faire apparaître le menu d'aide
      Interpréter le programme

      Editeur

      MenuRaccouciAction
      Ctrl+N Initialiser l'éditeur
      Ctrl+O Charger le contenu d'un fichier dans l'éditeur
      Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
      Ctrl+P Imprimer le contenu de l'éditeur
      Ctrl+Z Annuler la dernière modification
      Maj+Ctrl+Z Rétablir la modification précedente
      Ctrl+F Chercher une expression dans l'éditeur
      Maj+Ctrl+F Chercher et remplacer une expression par une autre
      F10 Ouvrir une documentation du langage

      RaccourciAction
      F1 Afficher cette aide
      Tab Indenter la sélection
      Maj+Tab Désindenter la sélection
      Ctrl+A Sélectionner le contenu de l'éditeur
      Ctrl+C Copier la sélection dans le presse-papier
      Ctrl+V Remplacer la sélection par le contenu du presse-papier
      Ctrl+X Supprimer la sélection et la copier dans le presse-papier
      Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    2. AAV4_REC: Choisir et appliquer une technique de vérification

      Une vérification par jeux de tests est proposée dans l'énoncé:

      print 'test fusion'
      tests = [([],0,0,0,[]),([4,5,1,2,3],0,2,5,[1,2,3,4,5]),
               ([9,7,4,6,8,10,3,5,2,0],2,6,8,[9,7,3,4,5,6,8,10,2,0])]
      for (e1,e2,e3,e4,s1) in tests :
          print e1,e2,e3,e4,
          fusion(e1,e2,e3,e4)
          verif = (e1 == s1)
          print e1,verif
      
      print '\ntest tri_fusion'
      tests = [([],-2,-5,[]),([1,2,3],0,3,[1,2,3]),
               ([3,2,1],1,25,[3,1,2]),([1,1,1],0,3,[1,1,1]),
               (['d','c','b','a'],0,4,['a','b','c','d']),
               (['r','e','d','a'],0,3,['d','e','r','a'])]
      for (e1,e2,e3,s1) in tests :
          e10 = e1[e2:e3]
          e10.sort()
          e10 = e1[0:e2] + e10 + e1[e3:]
          print e1,e10,
          tri_fusion(e1,e2,e3)
          verif1 = (e1 == s1 and e10 == s1)
          print e1,verif1
      
  8. Parcours d'arbres
    • Question
    • Solution

    On considère ici la notion d'arbre binaire. Un arbre binaire est soit vide, soit composé de 3 éléments : une racine, un arbre binaire Gauche et un arbre binaire Droite. L'arbre binaire vide sera représenté ici par la liste vide ([]), l'arbre binaire non vide par une liste de 3 éléments ([racine,Gauche,Droite]) où Gauche et Droite sont eux-mêmes des arbres binaires et racine de type quelconque.

    Ainsi, l'arbre binaire ci-dessous est représenté par la liste : [1,[2,[4,[],[]],[]],[3,[5,[],[]],[6,[],[7,[],[]]]]].

    _images/recursivite-type-tree-1.png

    On a souvent besoin de parcourir les éléments d'un arbre binaire pour effectuer un traitement. On distingue alors 3 types de parcours d'arbre :

    1. parcours en notation préfixée : on considère d'abord la racine de l'arbre avant de traiter le sous-arbre de gauche puis le sous-arbre de droite (l'arbre vide est affiché à l'aide d'un 0).

      Exemples de parcours préfixé :

      • [1,[2,[],[]],[3,[],[4,[],[]]]] : 1 2 0 0 3 0 4 0 0
      • [1,[2,[4,[],[]],[]],[3,[5,[],[]],[6,[],[7,[],[]]]]] : 1 2 4 0 0 0 3 5 0 0 6 0 7 0 0
    2. parcours en notation infixée : on traite d'abord le sous-arbre de gauche, puis la racine de l'arbre avant de passer au sous-arbre de droite (l'arbre vide est affiché à l'aide d'un 0).

      Exemples de parcours infixé :

      • [1,[2,[],[]],[3,[],[4,[],[]]]] : 0 2 0 1 0 3 0 4 0
      • [1,[2,[4,[],[]],[]],[3,[5,[],[]],[6,[],[7,[],[]]]]] : 0 4 0 2 0 1 0 5 0 3 0 6 0 7 0
    3. parcours en notation postfixée : on traite d'abord le sous-arbre de gauche, puis le sous-arbre de droite et enfin la racine de l'arbre (l'arbre vide est affiché à l'aide d'un 0).

      Exemples de parcours postfixé :

      • [1,[2,[],[]],[3,[],[4,[],[]]]] : 0 0 2 0 0 0 4 3 1
      • [1,[2,[4,[],[]],[]],[3,[5,[],[]],[6,[],[7,[],[]]]]] : 0 0 4 0 2 0 0 5 0 0 0 7 6 3 1
    1. Définir une fonction récursive isBinaryTree(t) qui teste si t est un arbre binaire.
    2. Définir une fonction récursive prefix(a) qui affiche les éléments d'un arbre binaire a en notation préfixée.
    3. Définir une fonction récursive infix(a) qui affiche les éléments d'un arbre binaire a en notation infixée.
    4. Définir une fonction récursive postfix(a) qui affiche les éléments d'un arbre binaire a en notation postfixée.
    Votre réponse :
    1. AAV4_REC: Résultat

      Utiliser l'interpréteur Python ci-dessous pour programmer les fonctions demandées.

      python : essai.py
      
          
      >>>
      Output
      
                      

      Interpréteur

      MenuAction
      Ré-initialiser les sorties
      Faire apparaître le menu d'aide
      Interpréter le programme

      Editeur

      MenuRaccouciAction
      Ctrl+N Initialiser l'éditeur
      Ctrl+O Charger le contenu d'un fichier dans l'éditeur
      Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
      Ctrl+P Imprimer le contenu de l'éditeur
      Ctrl+Z Annuler la dernière modification
      Maj+Ctrl+Z Rétablir la modification précedente
      Ctrl+F Chercher une expression dans l'éditeur
      Maj+Ctrl+F Chercher et remplacer une expression par une autre
      F10 Ouvrir une documentation du langage

      RaccourciAction
      F1 Afficher cette aide
      Tab Indenter la sélection
      Maj+Tab Désindenter la sélection
      Ctrl+A Sélectionner le contenu de l'éditeur
      Ctrl+C Copier la sélection dans le presse-papier
      Ctrl+V Remplacer la sélection par le contenu du presse-papier
      Ctrl+X Supprimer la sélection et la copier dans le presse-papier
      Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    2. AAV4_REC: Vérification

      Appliquer cette technique au résultat proposé.

      Si cette technique nécessite d'être implémentée en Python, le faire dans l'interpréteur Python ci-dessus (cf. Résultat), sinon développer la technique de vérification dans l'éditeur de texte ci-dessous.

      Zone de saisie de texte

      ClavierAction
      F1Afficher une aide technique
      F2Afficher une aide pédagogique
      Ctrl-ATout sélectionner
      Ctrl-CCopier la sélection dans le presse-papier
      Ctrl-VCopier le presse-papier dans la sélection
      Ctrl-XCouper la sélection et la copier dans le presse-papier
      Ctrl-ZAnnuler la modification
      Maj-Ctrl-ZRétablir la modification

      MenuAction
      Ré-initialiser les sorties
      Faire apparaître le menu d'aide
      Valider la zone de saisie
      Initialiser la zone de saisie
      Charger le contenu d'un fichier dans la zone de saisie
      Sauvegarder le contenu de la zone de saisie dans un fichier
      Imprimer le contenu de la zone de saisie
    Une solution possible :
    1. AAV4_REC: Répondre explicitement à la question posée

      Les fonctions demandées sont définies ci-dessous.

      python : recursivite-type-tree-1.py
      
          
      >>>
      Output
      
                      

      Interpréteur

      MenuAction
      Ré-initialiser les sorties
      Faire apparaître le menu d'aide
      Interpréter le programme

      Editeur

      MenuRaccouciAction
      Ctrl+N Initialiser l'éditeur
      Ctrl+O Charger le contenu d'un fichier dans l'éditeur
      Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
      Ctrl+P Imprimer le contenu de l'éditeur
      Ctrl+Z Annuler la dernière modification
      Maj+Ctrl+Z Rétablir la modification précedente
      Ctrl+F Chercher une expression dans l'éditeur
      Maj+Ctrl+F Chercher et remplacer une expression par une autre
      F10 Ouvrir une documentation du langage

      RaccourciAction
      F1 Afficher cette aide
      Tab Indenter la sélection
      Maj+Tab Désindenter la sélection
      Ctrl+A Sélectionner le contenu de l'éditeur
      Ctrl+C Copier la sélection dans le presse-papier
      Ctrl+V Remplacer la sélection par le contenu du presse-papier
      Ctrl+X Supprimer la sélection et la copier dans le presse-papier
      Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    2. AAV4_REC: Choisir et appliquer une technique de vérification

      On procède par jeux de tests pour retrouver les exemples d'affichages proposés dans l'énoncé:

      tests = [ [1,[2,[],[]],[3,[],[4,[],[]]]], [1,[2,[4,[],[]],[]],[3,[5,[],[]],[6,[],[7,[],[]]]]] ]
      for t in tests :
          print t,isBinaryTree(t)
          prefix(t)
          print
          infix(t)
          print
          postfix(t)
          print
      
  9. Cercles
    • Question
    • Solution

    Un « bubble » est une figure formée d’un cercle et de deux copies de ce cercle ayant subies une réduction d’un facteur 2, ces deux petits cercles étant tangents extérieurement au cercle initial tels que les lignes des centres soient parallèles aux axes du repère. Ces deux petits cercles deviennent à leur tour « cercle initial » pour poursuivre le dessin.

    La figure ci-dessous illustre de gauche à droite des bubbles de profondeur 1 à 4.

    _images/bubbles.png
    1. Définir une fonction circle(t,x,y,r) où la tortue t dessine un cercle de centre (x,y) et de rayon r.
    2. Définir une fonction récursive bubble(t,n,x,y,r) où la tortue t dessine un bubble de profondeur n à partir d'un cercle de centre (x,y) et de rayon r. A chaque étape, le rayon est divisé par 2.
    aide Python

    tortue Logo : (documentation Python)

    import turtle

    module Python à importer pour manipuler la tortue Logo.

    t = turtle.Turtle()

    crée une tortue t.

    t.setheading(a)

    oriente la tortue t dans une direction qui fait l'angle a (en degrés) avec l'axe horizontal (sens trigonométrique).

    t.forward(d)

    fait avancer la tortue t d'une distance d dans la direction courante.

    t.backward(d)

    fait reculer la tortue t d'une distance d dans la direction courante.

    t.left(a)

    fait tourner sur la gauche (sens trigonométrique) la tortue t (sans avancer, ni reculer) d'un angle a par rapport à la direction courante.

    t.right(a)

    fait tourner sur la droite (sens horaire) la tortue t (sans avancer, ni reculer) d'un angle a par rapport à la direction courante.

    t.goto(x,y)

    fait aller la tortue au point de coordonnées (x,y) quelle que soit son orientation.

    Votre réponse :
    1. AAV4_REC: Résultat

      Utiliser l'interpréteur Python ci-dessous pour programmer les fonctions demandées.

      python : essai.py
      
          
      >>>
      Output
      
                      

      Interpréteur

      MenuAction
      Ré-initialiser les sorties
      Faire apparaître le menu d'aide
      Interpréter le programme

      Editeur

      MenuRaccouciAction
      Ctrl+N Initialiser l'éditeur
      Ctrl+O Charger le contenu d'un fichier dans l'éditeur
      Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
      Ctrl+P Imprimer le contenu de l'éditeur
      Ctrl+Z Annuler la dernière modification
      Maj+Ctrl+Z Rétablir la modification précedente
      Ctrl+F Chercher une expression dans l'éditeur
      Maj+Ctrl+F Chercher et remplacer une expression par une autre
      F10 Ouvrir une documentation du langage

      RaccourciAction
      F1 Afficher cette aide
      Tab Indenter la sélection
      Maj+Tab Désindenter la sélection
      Ctrl+A Sélectionner le contenu de l'éditeur
      Ctrl+C Copier la sélection dans le presse-papier
      Ctrl+V Remplacer la sélection par le contenu du presse-papier
      Ctrl+X Supprimer la sélection et la copier dans le presse-papier
      Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    2. AAV4_REC: Vérification

      Appliquer cette technique au résultat proposé.

      Si cette technique nécessite d'être implémentée en Python, le faire dans l'interpréteur Python ci-dessus (cf. Résultat), sinon développer la technique de vérification dans l'éditeur de texte ci-dessous.

      Zone de saisie de texte

      ClavierAction
      F1Afficher une aide technique
      F2Afficher une aide pédagogique
      Ctrl-ATout sélectionner
      Ctrl-CCopier la sélection dans le presse-papier
      Ctrl-VCopier le presse-papier dans la sélection
      Ctrl-XCouper la sélection et la copier dans le presse-papier
      Ctrl-ZAnnuler la modification
      Maj-Ctrl-ZRétablir la modification

      MenuAction
      Ré-initialiser les sorties
      Faire apparaître le menu d'aide
      Valider la zone de saisie
      Initialiser la zone de saisie
      Charger le contenu d'un fichier dans la zone de saisie
      Sauvegarder le contenu de la zone de saisie dans un fichier
      Imprimer le contenu de la zone de saisie
    Une solution possible :
    1. AAV4_REC: Répondre explicitement à la question posée

      La fonction demandée est définie ci-dessous.

      python : recursivite-logo-1.py
      
          
      >>>
      Output
      
                      

      Interpréteur

      MenuAction
      Ré-initialiser les sorties
      Faire apparaître le menu d'aide
      Interpréter le programme

      Editeur

      MenuRaccouciAction
      Ctrl+N Initialiser l'éditeur
      Ctrl+O Charger le contenu d'un fichier dans l'éditeur
      Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
      Ctrl+P Imprimer le contenu de l'éditeur
      Ctrl+Z Annuler la dernière modification
      Maj+Ctrl+Z Rétablir la modification précedente
      Ctrl+F Chercher une expression dans l'éditeur
      Maj+Ctrl+F Chercher et remplacer une expression par une autre
      F10 Ouvrir une documentation du langage

      RaccourciAction
      F1 Afficher cette aide
      Tab Indenter la sélection
      Maj+Tab Désindenter la sélection
      Ctrl+A Sélectionner le contenu de l'éditeur
      Ctrl+C Copier la sélection dans le presse-papier
      Ctrl+V Remplacer la sélection par le contenu du presse-papier
      Ctrl+X Supprimer la sélection et la copier dans le presse-papier
      Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    2. AAV4_REC: Choisir et appliquer une technique de vérification

      On procède par simple comparaison de figures : on retrouve bien les figures de l'énoncé.

  10. Arbres
    • Question
    • Solution

    On considère un arbre composé d'un tronc de hauteur \(h\), de 2 branches principales (la gauche et la droite) qui font respectivement un angle \(a_g\) et \(a_d\) avec l'axe du tronc. Chaque branche se décompose elle-même de la même façon jusqu'à une « profondeur » \(p\) comme le montre la figure ci-dessous pour différentes valeurs de \(p\) (de gauche à droite : \(p =\) 0, 2, 4, 6).

    _images/arbres.png

    Définir une fonction récursive arbre(t,h,p,rg,ag,rd,ad) où la tortue t dessine un arbre de hauteur h et de profondeur p. A chaque nouvelle étape, la longueur d'une branche gauche est multipliée par rg (\(0 < r_g < 1\)), celle de la branche droite par rd (\(0 < r_d < 1\)). La branche gauche fait un angle ag par rapport à la branche précédente, la branche droite un angle ad.

    aide Python

    tortue Logo : (documentation Python)

    import turtle

    module Python à importer pour manipuler la tortue Logo.

    t = turtle.Turtle()

    crée une tortue t.

    t.setheading(a)

    oriente la tortue t dans une direction qui fait l'angle a (en degrés) avec l'axe horizontal (sens trigonométrique).

    t.forward(d)

    fait avancer la tortue t d'une distance d dans la direction courante.

    t.backward(d)

    fait reculer la tortue t d'une distance d dans la direction courante.

    t.left(a)

    fait tourner sur la gauche (sens trigonométrique) la tortue t (sans avancer, ni reculer) d'un angle a par rapport à la direction courante.

    t.right(a)

    fait tourner sur la droite (sens horaire) la tortue t (sans avancer, ni reculer) d'un angle a par rapport à la direction courante.

    t.goto(x,y)

    fait aller la tortue au point de coordonnées (x,y) quelle que soit son orientation.

    Votre réponse :
    1. AAV4_REC: Résultat

      Utiliser l'interpréteur Python ci-dessous pour programmer les fonctions demandées.

      python : essai.py
      
          
      >>>
      Output
      
                      

      Interpréteur

      MenuAction
      Ré-initialiser les sorties
      Faire apparaître le menu d'aide
      Interpréter le programme

      Editeur

      MenuRaccouciAction
      Ctrl+N Initialiser l'éditeur
      Ctrl+O Charger le contenu d'un fichier dans l'éditeur
      Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
      Ctrl+P Imprimer le contenu de l'éditeur
      Ctrl+Z Annuler la dernière modification
      Maj+Ctrl+Z Rétablir la modification précedente
      Ctrl+F Chercher une expression dans l'éditeur
      Maj+Ctrl+F Chercher et remplacer une expression par une autre
      F10 Ouvrir une documentation du langage

      RaccourciAction
      F1 Afficher cette aide
      Tab Indenter la sélection
      Maj+Tab Désindenter la sélection
      Ctrl+A Sélectionner le contenu de l'éditeur
      Ctrl+C Copier la sélection dans le presse-papier
      Ctrl+V Remplacer la sélection par le contenu du presse-papier
      Ctrl+X Supprimer la sélection et la copier dans le presse-papier
      Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    2. AAV4_REC: Vérification

      Appliquer cette technique au résultat proposé.

      Si cette technique nécessite d'être implémentée en Python, le faire dans l'interpréteur Python ci-dessus (cf. Résultat), sinon développer la technique de vérification dans l'éditeur de texte ci-dessous.

      Zone de saisie de texte

      ClavierAction
      F1Afficher une aide technique
      F2Afficher une aide pédagogique
      Ctrl-ATout sélectionner
      Ctrl-CCopier la sélection dans le presse-papier
      Ctrl-VCopier le presse-papier dans la sélection
      Ctrl-XCouper la sélection et la copier dans le presse-papier
      Ctrl-ZAnnuler la modification
      Maj-Ctrl-ZRétablir la modification

      MenuAction
      Ré-initialiser les sorties
      Faire apparaître le menu d'aide
      Valider la zone de saisie
      Initialiser la zone de saisie
      Charger le contenu d'un fichier dans la zone de saisie
      Sauvegarder le contenu de la zone de saisie dans un fichier
      Imprimer le contenu de la zone de saisie
    Une solution possible :
    1. AAV4_REC: Répondre explicitement à la question posée

    La fonction demandée est définie ci-dessous.

    python : recursivite-logo-3.py
    
        
    >>>
    Output
    
                    

    Interpréteur

    MenuAction
    Ré-initialiser les sorties
    Faire apparaître le menu d'aide
    Interpréter le programme

    Editeur

    MenuRaccouciAction
    Ctrl+N Initialiser l'éditeur
    Ctrl+O Charger le contenu d'un fichier dans l'éditeur
    Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
    Ctrl+P Imprimer le contenu de l'éditeur
    Ctrl+Z Annuler la dernière modification
    Maj+Ctrl+Z Rétablir la modification précedente
    Ctrl+F Chercher une expression dans l'éditeur
    Maj+Ctrl+F Chercher et remplacer une expression par une autre
    F10 Ouvrir une documentation du langage

    RaccourciAction
    F1 Afficher cette aide
    Tab Indenter la sélection
    Maj+Tab Désindenter la sélection
    Ctrl+A Sélectionner le contenu de l'éditeur
    Ctrl+C Copier la sélection dans le presse-papier
    Ctrl+V Remplacer la sélection par le contenu du presse-papier
    Ctrl+X Supprimer la sélection et la copier dans le presse-papier
    Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    1. AAV4_REC: Choisir et appliquer une technique de vérification

      On procède par simple comparaison de figures : on retrouve bien les figures de l'énoncé.

  11. Dragons
    • Question
    • Solution

    La courbe du dragon est obtenue à partir d'un segment sur lequel on construit 2 autres segments de façon à former un triangle rectangle isocèle. A chaque étape, on alterne le sens de construction des triangles.

    _images/dragons.png

    Définir une fonction récursive dragon(t,n,s) où la tortue t dessine la courbe du dragon à l'ordre n en initialisant les rotations sur la droite (s = -1) ou sur la gauche (s = 1).

    aide Python

    tortue Logo : (documentation Python)

    import turtle

    module Python à importer pour manipuler la tortue Logo.

    t = turtle.Turtle()

    crée une tortue t.

    t.setheading(a)

    oriente la tortue t dans une direction qui fait l'angle a (en degrés) avec l'axe horizontal (sens trigonométrique).

    t.forward(d)

    fait avancer la tortue t d'une distance d dans la direction courante.

    t.backward(d)

    fait reculer la tortue t d'une distance d dans la direction courante.

    t.left(a)

    fait tourner sur la gauche (sens trigonométrique) la tortue t (sans avancer, ni reculer) d'un angle a par rapport à la direction courante.

    t.right(a)

    fait tourner sur la droite (sens horaire) la tortue t (sans avancer, ni reculer) d'un angle a par rapport à la direction courante.

    t.goto(x,y)

    fait aller la tortue au point de coordonnées (x,y) quelle que soit son orientation.

    Votre réponse :
    1. AAV4_REC: Résultat

      Utiliser l'interpréteur Python ci-dessous pour programmer les fonctions demandées.

      python : essai.py
      
          
      >>>
      Output
      
                      

      Interpréteur

      MenuAction
      Ré-initialiser les sorties
      Faire apparaître le menu d'aide
      Interpréter le programme

      Editeur

      MenuRaccouciAction
      Ctrl+N Initialiser l'éditeur
      Ctrl+O Charger le contenu d'un fichier dans l'éditeur
      Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
      Ctrl+P Imprimer le contenu de l'éditeur
      Ctrl+Z Annuler la dernière modification
      Maj+Ctrl+Z Rétablir la modification précedente
      Ctrl+F Chercher une expression dans l'éditeur
      Maj+Ctrl+F Chercher et remplacer une expression par une autre
      F10 Ouvrir une documentation du langage

      RaccourciAction
      F1 Afficher cette aide
      Tab Indenter la sélection
      Maj+Tab Désindenter la sélection
      Ctrl+A Sélectionner le contenu de l'éditeur
      Ctrl+C Copier la sélection dans le presse-papier
      Ctrl+V Remplacer la sélection par le contenu du presse-papier
      Ctrl+X Supprimer la sélection et la copier dans le presse-papier
      Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    2. AAV4_REC: Vérification

      Appliquer cette technique au résultat proposé.

      Si cette technique nécessite d'être implémentée en Python, le faire dans l'interpréteur Python ci-dessus (cf. Résultat), sinon développer la technique de vérification dans l'éditeur de texte ci-dessous.

      Zone de saisie de texte

      ClavierAction
      F1Afficher une aide technique
      F2Afficher une aide pédagogique
      Ctrl-ATout sélectionner
      Ctrl-CCopier la sélection dans le presse-papier
      Ctrl-VCopier le presse-papier dans la sélection
      Ctrl-XCouper la sélection et la copier dans le presse-papier
      Ctrl-ZAnnuler la modification
      Maj-Ctrl-ZRétablir la modification

      MenuAction
      Ré-initialiser les sorties
      Faire apparaître le menu d'aide
      Valider la zone de saisie
      Initialiser la zone de saisie
      Charger le contenu d'un fichier dans la zone de saisie
      Sauvegarder le contenu de la zone de saisie dans un fichier
      Imprimer le contenu de la zone de saisie
    Une solution possible :
    1. AAV4_REC: Répondre explicitement à la question posée

    La fonction demandée est définie ci-dessous.

    python : recursivite-logo-4.py
    
        
    >>>
    Output
    
                    

    Interpréteur

    MenuAction
    Ré-initialiser les sorties
    Faire apparaître le menu d'aide
    Interpréter le programme

    Editeur

    MenuRaccouciAction
    Ctrl+N Initialiser l'éditeur
    Ctrl+O Charger le contenu d'un fichier dans l'éditeur
    Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
    Ctrl+P Imprimer le contenu de l'éditeur
    Ctrl+Z Annuler la dernière modification
    Maj+Ctrl+Z Rétablir la modification précedente
    Ctrl+F Chercher une expression dans l'éditeur
    Maj+Ctrl+F Chercher et remplacer une expression par une autre
    F10 Ouvrir une documentation du langage

    RaccourciAction
    F1 Afficher cette aide
    Tab Indenter la sélection
    Maj+Tab Désindenter la sélection
    Ctrl+A Sélectionner le contenu de l'éditeur
    Ctrl+C Copier la sélection dans le presse-papier
    Ctrl+V Remplacer la sélection par le contenu du presse-papier
    Ctrl+X Supprimer la sélection et la copier dans le presse-papier
    Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    1. AAV4_REC: Choisir et appliquer une technique de vérification

      On procède par simple comparaison de figures : on retrouve bien les figures de l'énoncé.

  12. Distribuer les cartes
    • Question
    • Solution

    Définir une fonction récursive distribuer(jeu,mains) qui retourne la liste des cartes du jeu (un jeu est une liste de cartes) non distribuées (la pioche) entre n joueurs (n = len(mains)); mains est la liste des mains (une main est une liste de cartes) de chaque joueur.

    Votre réponse :
    1. AAV4_REC: Résultat

      Utiliser l'interpréteur Python ci-dessous pour programmer les fonctions demandées.

      python : essai.py
      
          
      >>>
      Output
      
                      

      Interpréteur

      MenuAction
      Ré-initialiser les sorties
      Faire apparaître le menu d'aide
      Interpréter le programme

      Editeur

      MenuRaccouciAction
      Ctrl+N Initialiser l'éditeur
      Ctrl+O Charger le contenu d'un fichier dans l'éditeur
      Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
      Ctrl+P Imprimer le contenu de l'éditeur
      Ctrl+Z Annuler la dernière modification
      Maj+Ctrl+Z Rétablir la modification précedente
      Ctrl+F Chercher une expression dans l'éditeur
      Maj+Ctrl+F Chercher et remplacer une expression par une autre
      F10 Ouvrir une documentation du langage

      RaccourciAction
      F1 Afficher cette aide
      Tab Indenter la sélection
      Maj+Tab Désindenter la sélection
      Ctrl+A Sélectionner le contenu de l'éditeur
      Ctrl+C Copier la sélection dans le presse-papier
      Ctrl+V Remplacer la sélection par le contenu du presse-papier
      Ctrl+X Supprimer la sélection et la copier dans le presse-papier
      Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    2. AAV4_REC: Vérification

      Appliquer cette technique au résultat proposé.

      Si cette technique nécessite d'être implémentée en Python, le faire dans l'interpréteur Python ci-dessus (cf. Résultat), sinon développer la technique de vérification dans l'éditeur de texte ci-dessous.

      Zone de saisie de texte

      ClavierAction
      F1Afficher une aide technique
      F2Afficher une aide pédagogique
      Ctrl-ATout sélectionner
      Ctrl-CCopier la sélection dans le presse-papier
      Ctrl-VCopier le presse-papier dans la sélection
      Ctrl-XCouper la sélection et la copier dans le presse-papier
      Ctrl-ZAnnuler la modification
      Maj-Ctrl-ZRétablir la modification

      MenuAction
      Ré-initialiser les sorties
      Faire apparaître le menu d'aide
      Valider la zone de saisie
      Initialiser la zone de saisie
      Charger le contenu d'un fichier dans la zone de saisie
      Sauvegarder le contenu de la zone de saisie dans un fichier
      Imprimer le contenu de la zone de saisie
    Une solution possible :
    1. AAV4_REC: Répondre explicitement à la question posée

      La fonction demandée est définie ci-dessous.

      python : recursivite-jeux-2.py
      
          
      >>>
      Output
      
                      

      Interpréteur

      MenuAction
      Ré-initialiser les sorties
      Faire apparaître le menu d'aide
      Interpréter le programme

      Editeur

      MenuRaccouciAction
      Ctrl+N Initialiser l'éditeur
      Ctrl+O Charger le contenu d'un fichier dans l'éditeur
      Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
      Ctrl+P Imprimer le contenu de l'éditeur
      Ctrl+Z Annuler la dernière modification
      Maj+Ctrl+Z Rétablir la modification précedente
      Ctrl+F Chercher une expression dans l'éditeur
      Maj+Ctrl+F Chercher et remplacer une expression par une autre
      F10 Ouvrir une documentation du langage

      RaccourciAction
      F1 Afficher cette aide
      Tab Indenter la sélection
      Maj+Tab Désindenter la sélection
      Ctrl+A Sélectionner le contenu de l'éditeur
      Ctrl+C Copier la sélection dans le presse-papier
      Ctrl+V Remplacer la sélection par le contenu du presse-papier
      Ctrl+X Supprimer la sélection et la copier dans le presse-papier
      Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    2. AAV4_REC: Choisir et appliquer une technique de vérification

      On procède par jeux de tests:

      import random
      n = random.choice([32,52,78])
      jeu = range(n)
      r = random.randint(2,9)
      mains = []
      for k in range(r) :
          mains.append([])
      pioche = distribuer(jeu,mains)
      print n,r,pioche
      for j in mains :
          print len(j),j
      
  13. Compter les points
    • Question
    • Solution
    1. Définir une fonction récursive compter(t) qui retourne la somme des éléments de la liste t où t représente la main d'un joueur de cartes. On supposera que chaque carte est représentée par un entier qui est aussi sa valeur.
    2. Ecrire une version itérative de cette fonction.
    Votre réponse :
    1. AAV4_REC: Résultat

      Utiliser l'interpréteur Python ci-dessous pour programmer les fonctions demandées.

      python : essai.py
      
          
      >>>
      Output
      
                      

      Interpréteur

      MenuAction
      Ré-initialiser les sorties
      Faire apparaître le menu d'aide
      Interpréter le programme

      Editeur

      MenuRaccouciAction
      Ctrl+N Initialiser l'éditeur
      Ctrl+O Charger le contenu d'un fichier dans l'éditeur
      Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
      Ctrl+P Imprimer le contenu de l'éditeur
      Ctrl+Z Annuler la dernière modification
      Maj+Ctrl+Z Rétablir la modification précedente
      Ctrl+F Chercher une expression dans l'éditeur
      Maj+Ctrl+F Chercher et remplacer une expression par une autre
      F10 Ouvrir une documentation du langage

      RaccourciAction
      F1 Afficher cette aide
      Tab Indenter la sélection
      Maj+Tab Désindenter la sélection
      Ctrl+A Sélectionner le contenu de l'éditeur
      Ctrl+C Copier la sélection dans le presse-papier
      Ctrl+V Remplacer la sélection par le contenu du presse-papier
      Ctrl+X Supprimer la sélection et la copier dans le presse-papier
      Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    2. AAV4_REC: Vérification

      Appliquer cette technique au résultat proposé.

      Si cette technique nécessite d'être implémentée en Python, le faire dans l'interpréteur Python ci-dessus (cf. Résultat), sinon développer la technique de vérification dans l'éditeur de texte ci-dessous.

      Zone de saisie de texte

      ClavierAction
      F1Afficher une aide technique
      F2Afficher une aide pédagogique
      Ctrl-ATout sélectionner
      Ctrl-CCopier la sélection dans le presse-papier
      Ctrl-VCopier le presse-papier dans la sélection
      Ctrl-XCouper la sélection et la copier dans le presse-papier
      Ctrl-ZAnnuler la modification
      Maj-Ctrl-ZRétablir la modification

      MenuAction
      Ré-initialiser les sorties
      Faire apparaître le menu d'aide
      Valider la zone de saisie
      Initialiser la zone de saisie
      Charger le contenu d'un fichier dans la zone de saisie
      Sauvegarder le contenu de la zone de saisie dans un fichier
      Imprimer le contenu de la zone de saisie
    Une solution possible :
    1. AAV4_REC: Répondre explicitement à la question posée

      La fonction demandée est définie ci-dessous.

      python : recursivite-jeux-3.py
      
          
      >>>
      Output
      
                      

      Interpréteur

      MenuAction
      Ré-initialiser les sorties
      Faire apparaître le menu d'aide
      Interpréter le programme

      Editeur

      MenuRaccouciAction
      Ctrl+N Initialiser l'éditeur
      Ctrl+O Charger le contenu d'un fichier dans l'éditeur
      Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
      Ctrl+P Imprimer le contenu de l'éditeur
      Ctrl+Z Annuler la dernière modification
      Maj+Ctrl+Z Rétablir la modification précedente
      Ctrl+F Chercher une expression dans l'éditeur
      Maj+Ctrl+F Chercher et remplacer une expression par une autre
      F10 Ouvrir une documentation du langage

      RaccourciAction
      F1 Afficher cette aide
      Tab Indenter la sélection
      Maj+Tab Désindenter la sélection
      Ctrl+A Sélectionner le contenu de l'éditeur
      Ctrl+C Copier la sélection dans le presse-papier
      Ctrl+V Remplacer la sélection par le contenu du presse-papier
      Ctrl+X Supprimer la sélection et la copier dans le presse-papier
      Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    2. AAV4_REC: Choisir et appliquer une technique de vérification

      On procède par jeux de tests : les versions récursive et itérative donnent bien les mêmes résultats.

  14. Elévation à la puissance
    • Question
    • Solution
    1. Définir une fonction récursive qui calcule l'élévation d'un nombre à une puissance entière (\(p = x^n\)).
    2. Vérifier le bon fonctionnement de la fonction précédente avec l'opérateur prédéfini **.
    Votre réponse :
    1. AAV4_REC: Résultat

      Utiliser l'interpréteur Python ci-dessous pour programmer les fonctions demandées.

      python : essai.py
      
          
      >>>
      Output
      
                      

      Interpréteur

      MenuAction
      Ré-initialiser les sorties
      Faire apparaître le menu d'aide
      Interpréter le programme

      Editeur

      MenuRaccouciAction
      Ctrl+N Initialiser l'éditeur
      Ctrl+O Charger le contenu d'un fichier dans l'éditeur
      Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
      Ctrl+P Imprimer le contenu de l'éditeur
      Ctrl+Z Annuler la dernière modification
      Maj+Ctrl+Z Rétablir la modification précedente
      Ctrl+F Chercher une expression dans l'éditeur
      Maj+Ctrl+F Chercher et remplacer une expression par une autre
      F10 Ouvrir une documentation du langage

      RaccourciAction
      F1 Afficher cette aide
      Tab Indenter la sélection
      Maj+Tab Désindenter la sélection
      Ctrl+A Sélectionner le contenu de l'éditeur
      Ctrl+C Copier la sélection dans le presse-papier
      Ctrl+V Remplacer la sélection par le contenu du presse-papier
      Ctrl+X Supprimer la sélection et la copier dans le presse-papier
      Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    2. AAV4_REC: Vérification

      Appliquer cette technique au résultat proposé.

      Si cette technique nécessite d'être implémentée en Python, le faire dans l'interpréteur Python ci-dessus (cf. Résultat), sinon développer la technique de vérification dans l'éditeur de texte ci-dessous.

      Zone de saisie de texte

      ClavierAction
      F1Afficher une aide technique
      F2Afficher une aide pédagogique
      Ctrl-ATout sélectionner
      Ctrl-CCopier la sélection dans le presse-papier
      Ctrl-VCopier le presse-papier dans la sélection
      Ctrl-XCouper la sélection et la copier dans le presse-papier
      Ctrl-ZAnnuler la modification
      Maj-Ctrl-ZRétablir la modification

      MenuAction
      Ré-initialiser les sorties
      Faire apparaître le menu d'aide
      Valider la zone de saisie
      Initialiser la zone de saisie
      Charger le contenu d'un fichier dans la zone de saisie
      Sauvegarder le contenu de la zone de saisie dans un fichier
      Imprimer le contenu de la zone de saisie
    Une solution possible :
    1. AAV4_REC: Répondre explicitement à la question posée

      La fonction demandée est définie ci-dessous.

      python : recursivite-elem-1.py
      
          
      >>>
      Output
      
                      

      Interpréteur

      MenuAction
      Ré-initialiser les sorties
      Faire apparaître le menu d'aide
      Interpréter le programme

      Editeur

      MenuRaccouciAction
      Ctrl+N Initialiser l'éditeur
      Ctrl+O Charger le contenu d'un fichier dans l'éditeur
      Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
      Ctrl+P Imprimer le contenu de l'éditeur
      Ctrl+Z Annuler la dernière modification
      Maj+Ctrl+Z Rétablir la modification précedente
      Ctrl+F Chercher une expression dans l'éditeur
      Maj+Ctrl+F Chercher et remplacer une expression par une autre
      F10 Ouvrir une documentation du langage

      RaccourciAction
      F1 Afficher cette aide
      Tab Indenter la sélection
      Maj+Tab Désindenter la sélection
      Ctrl+A Sélectionner le contenu de l'éditeur
      Ctrl+C Copier la sélection dans le presse-papier
      Ctrl+V Remplacer la sélection par le contenu du presse-papier
      Ctrl+X Supprimer la sélection et la copier dans le presse-papier
      Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    2. AAV4_REC: Choisir et appliquer une technique de vérification

      Une vérification par jeux de tests est proposée dans l'énoncé:

      import random
      for i in range(1,10) :
          x = random.randint(0,20)
          n = random.randint(0,10)
          r = puissance(x,n)
          verif = (r == x**n)
          print x,n,r,verif
      
  15. Fonction d'Ackermann
    • Question
    • Solution

    Définir une fonction récursive qui calcule la fonction d'Ackermann.

    \[f(m,n) = \left\{\begin{array}{ll} n + 1 & \mathrm{\ si\ } m = 0 \\ f(m-1,1) & \mathrm{\ si\ } m > 0 \mathrm{\ et\ } n = 0 \\ f(m-1,f(m,n-1)) & \mathrm{\ si\ } m > 0 \mathrm{\ et\ } n > 0 \end{array}\right.\]
    Votre réponse :
    1. AAV4_REC: Résultat

      Utiliser l'interpréteur Python ci-dessous pour programmer les fonctions demandées.

      python : essai.py
      
          
      >>>
      Output
      
                      

      Interpréteur

      MenuAction
      Ré-initialiser les sorties
      Faire apparaître le menu d'aide
      Interpréter le programme

      Editeur

      MenuRaccouciAction
      Ctrl+N Initialiser l'éditeur
      Ctrl+O Charger le contenu d'un fichier dans l'éditeur
      Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
      Ctrl+P Imprimer le contenu de l'éditeur
      Ctrl+Z Annuler la dernière modification
      Maj+Ctrl+Z Rétablir la modification précedente
      Ctrl+F Chercher une expression dans l'éditeur
      Maj+Ctrl+F Chercher et remplacer une expression par une autre
      F10 Ouvrir une documentation du langage

      RaccourciAction
      F1 Afficher cette aide
      Tab Indenter la sélection
      Maj+Tab Désindenter la sélection
      Ctrl+A Sélectionner le contenu de l'éditeur
      Ctrl+C Copier la sélection dans le presse-papier
      Ctrl+V Remplacer la sélection par le contenu du presse-papier
      Ctrl+X Supprimer la sélection et la copier dans le presse-papier
      Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    2. AAV4_REC: Vérification

      Appliquer cette technique au résultat proposé.

      Si cette technique nécessite d'être implémentée en Python, le faire dans l'interpréteur Python ci-dessus (cf. Résultat), sinon développer la technique de vérification dans l'éditeur de texte ci-dessous.

      Zone de saisie de texte

      ClavierAction
      F1Afficher une aide technique
      F2Afficher une aide pédagogique
      Ctrl-ATout sélectionner
      Ctrl-CCopier la sélection dans le presse-papier
      Ctrl-VCopier le presse-papier dans la sélection
      Ctrl-XCouper la sélection et la copier dans le presse-papier
      Ctrl-ZAnnuler la modification
      Maj-Ctrl-ZRétablir la modification

      MenuAction
      Ré-initialiser les sorties
      Faire apparaître le menu d'aide
      Valider la zone de saisie
      Initialiser la zone de saisie
      Charger le contenu d'un fichier dans la zone de saisie
      Sauvegarder le contenu de la zone de saisie dans un fichier
      Imprimer le contenu de la zone de saisie
    Une solution possible :
    1. AAV4_REC: Répondre explicitement à la question posée

      La fonction demandée est définie ci-dessous.

      python : recursivite-prop-0.py
      
          
      >>>
      Output
      
                      

      Interpréteur

      MenuAction
      Ré-initialiser les sorties
      Faire apparaître le menu d'aide
      Interpréter le programme

      Editeur

      MenuRaccouciAction
      Ctrl+N Initialiser l'éditeur
      Ctrl+O Charger le contenu d'un fichier dans l'éditeur
      Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
      Ctrl+P Imprimer le contenu de l'éditeur
      Ctrl+Z Annuler la dernière modification
      Maj+Ctrl+Z Rétablir la modification précedente
      Ctrl+F Chercher une expression dans l'éditeur
      Maj+Ctrl+F Chercher et remplacer une expression par une autre
      F10 Ouvrir une documentation du langage

      RaccourciAction
      F1 Afficher cette aide
      Tab Indenter la sélection
      Maj+Tab Désindenter la sélection
      Ctrl+A Sélectionner le contenu de l'éditeur
      Ctrl+C Copier la sélection dans le presse-papier
      Ctrl+V Remplacer la sélection par le contenu du presse-papier
      Ctrl+X Supprimer la sélection et la copier dans le presse-papier
      Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    2. AAV4_REC: Choisir et appliquer une technique de vérification

      Une vérification par jeux de tests suffit:

      tests = [(0,5,6),(1,0,2),(1,1,3),(3,5,253)]
      for (e1,e2,s1) in tests :
          r = ackermann(e1,e2)
          verif = (r == s1)
          print e1,e2,r,verif
      
 
Algorithmique - Cours : Récursivité - Exercices de programmation, 14 oct. 2024.