Exercices⚓︎
Ex. 1 : En série⚓︎
Exercice 1
Quelles réflexions vous inspirent les fonctions récursives suivantes ?
- Ne se termine pas. \(n\) ne tend pas vers 0.
- Ne se termine pas dans le cas ou \(n\) est impair.
- La définition est incomplète. Il manque le cas ou \(n=1\).
Ex. 2 : Nb chiffres⚓︎
Exercice 2
Ecrire une fonction récursive nombreDeChiffre(n)
qui prend un entier positif ou nul n en argument et renvoie son nombre de chiffre. Par exemple, nombreDeChiffre(34126)
doit renvoyer 5.
def nombreDeChiffre(n):
if n<=9 :
return 1
else :
return 1 + nombreDeChiffre(n//10)
print(nombreDeChiffre(34126))
Ex. 3: Palindrome⚓︎
Exercice 3
-
Définir une fonction récursive qui détermine l'inverse d'une chaîne de caractères
inverse(s)
. -
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"
'''
La première étape est de définir notre scénario de base, qui vérifiera si la chaîne est égale à 0 et,
si oui, retourne la chaîne elle-même.
La deuxième étape est d'appeler de manière récursif la fonction d'inversion
afin d'extraire le premier caractère et ensuite l'ajouter à la fin de la chaîne.
'''
def inverse(s):
if len(s)==1 :
return s
else :
return inverse(s[1:]) + s[0]
print(inverse('toto'))
def isPalin(s) :
return (s == inverse(s))
print(isPalin('kayak'))
def palindrome(s) :
if len(s) < 2 :
return True
return (s[0] == s[len(s)-1]) and palindrome(s[1:-1])
print(palindrome('kayak'))
Ex. 4 : puissance⚓︎
Exercice 4
Écrire une fonction récursive puissance(x,n)
qui calcule le nombre \(x^n\).
🐍 Script Python | |
---|---|
1 2 3 4 5 |
|
Ex. 5 : PGCD⚓︎
Exercice 5
On rappelle que le PGCD (plus grand diviseur commun de deux nombres) vérifie la propriété suivante : si la division euclidienne de \(a\) par \(b\) s'écrit \(a = b \times q + r\), alors \(pgcd(a,b)=pgcd(b,r)\).
Cette propriété est à la base de l'algorithme d'Euclide
Exemple : \(pgcd(24,18)=pgcd(18,6)=pgcd(6,0)\), donc \(pgcd(24,18)=6\)
Écrire un algorithme récursif pgcd(a,b)
.
🐍 Script Python | |
---|---|
1 2 3 4 5 |
|
Ex. 6 : Syracuse⚓︎
Exercice 6
La conjecture de Syracuse (ou de Collatz) postule ceci :
Prenons un nombre \(n\) : si \(n\) est pair, on le divise par 2, sinon on le multiplie par 3 puis on ajoute 1. On recommence cette opération tant que possible. Au bout d'un certain temps, on finira toujours par tomber sur le nombre 1.
- Proposer un programme récursif
syracuse(n)
écrivant tous les termes de la suite de Syracuse, s'arrêtant (on l'espère) à la valeur 1. - On appelle «temps de vol» le nombre d'étapes nécessaires avant de retomber sur 1. Modifier la fonction précédente afin qu'elle affiche le temps de vol pour tout nombre
n
.
1.
🐍 Script Python | |
---|---|
1 2 3 4 5 6 7 8 |
|
🐍 Script Python | |
---|---|
1 2 3 4 5 6 7 8 9 10 |
|
Ex. 7 : dessin⚓︎
Exercice 7
Reproduire le dessin suivant, à l'aide du module turtle
.
turtle
est un hommage au langage LOGO inventé par Seymour Papert au MIT à la fin des années 60.
🐍 Script Python | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
Ex. 8 : Puissance v2⚓︎
Exercice 8
Proposer une nouvelle fonction récursive puissance_mod(x,n)
qui calcule le nombre \(x^n\). Pour optimiser la fonction déjà construite à l'exercice 4, utiliser le fait que :
- si \(n\) est pair, \(a^n=(a \times a)^{n/2}\)
- sinon \(a^n=a \times (a \times a)^{(n-1)/2}\)
🐍 Script Python | |
---|---|
1 2 3 4 5 6 7 8 |
|
Ex. 9 : Recherche⚓︎
Exercice 9
Écrire un algorithme récursif recherche(lst,m)
qui recherche la présence de la valeur m
dans une liste triée (par ordre croissant) lst
.
Cette fonction doit renvoyer un booléen.
Aide :
Les techniques de slicing (hors-programme) permettent de couper une liste en deux :
>>> lst = [10, 12, 15, 17, 18, 20, 22]
>>> lst[:3]
[10, 12, 15]
>>> lst[3:]
[17, 18, 20, 22]
🐍 Script Python | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
Ex. 10 : Hanoï⚓︎
Exercice 10
On considère le jeu des Tours de Hanoï.
Le but est de faire passer toutes les assiettes de A vers C, sachant qu'une assiette ne peut être déposée que sur une assiette de diamètre inférieur.
Une version jouable en ligne peut être trouvée ici.
- S'entraîner et essayer d'établir une stratégie de victoire.
- Observer les images ci-dessous :
Écrire une fonction récursive hanoi(n, A, B, C)
qui donnera la suite d'instructions (sous la forme " A vers C") pour faire passer une pile de taille n de A vers C en prenant B comme intermédiaire.
🐍 Script Python | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
Ex. 11 : Flocon⚓︎
Exercice 11
Cet exercice a pour objectif le tracé du flocon de Von Koch.
L'idée est de répéter de manière récursive la transformation ci-dessous : chaque segment de longueur l
donne naissance à 4 segments de longueur l/3
, en construisant une pointe de triangle équilatéral sur le deuxième tiers du segment.
1) Créer une fonction récursive floc(n,l)
qui trace à une «profondeur» n
un segment de longueur l
.
Indications
- l'instruction de tracé n'a lieu que quand
n
vaut 0. - l'étape
n
fait 4 appels sucessifs à l'étapen-1
.
2) Créer une fonction triangle(n,l)
qui trace le flocon complet.
🐍 Script Python | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
Bibliographie
- Numérique et Sciences Informatiques, Terminale, T. BALABONSKI, S. CONCHON, J.-C. FILLIATRE, K. NGUYEN, éditions ELLIPSES.
- Prépabac NSI, Terminale, G.CONNAN, V.PETROV, G.ROZSAVOLGYI, L.SIGNAC, éditions HATIER.