Aller au contenu

Affichage d'intervalle⚓︎

On veut créer une fonction affiche_intervalle qui affiche les entiers de mini à maxi tous deux inclus.

  • mini et maxi sont des entiers
  • si maxi < mini, il n'y a rien à afficher

Voici trois solutions récursives d'élèves, sont-elles justes ou fausses, améliorables ?

Version 1

🐍 Script Python
def affiche_intervalle(mini, maxi):
    if mini == maxi + 1:
        return maxi
    else:
        print(mini)
        return affiche_intervalle(mini + 1, maxi)
Réponse
  1. La fonction devrait renvoyer None implicitement, et non une valeur ; il ne faut pas de return dans cette fonction.
  2. La condition doit être revue ; les appels récursifs ne s'arrêtent pas si mini > maxi + 1.

Version 2

🐍 Script Python
def affiche_intervalle(mini, maxi):
    if mini == maxi:
        print(mini)
    elif mini > maxi:
        return None
    else:
        affiche_intervalle(mini, maxi - 1)
        print(maxi)
Réponse
  1. C'est correct.
  2. Mais on peut simplifier,
    • le premier cas est inutile,
    • le second peut se simplifier encore,
    • le troisième peut s'écrire de deux façons.

Version 3

🐍 Script Python
def affiche_intervalle(mini, maxi):
    """Affiche, un par ligne, les entiers de mini à maxi inclus"""

    if mini <= maxi:
        print(mini)
        affiche_intervalle(mini + 1, maxi)
Réponse

C'est parfait.

Il y a même une docstring, c'est une bonne pratique à adopter pour toute fonction.