informatique (tronc commun des prépas scientifiques) · Chapitre 6 · Exercice de TD
Générer dans l'ordre du code de Gray
Fonctions récursives · niveau 3 (difficile)
Énoncé
Écrire la fonction gray(n) qui engendre par réflexion les mots binaires de longueur de telle sorte que deux mots consécutifs ne diffèrent que d'un unique bit.
Corrigé
def gray(n: int) -> list:
if n == 0:
return [""]
g = gray(n - 1)
return ["0" + m for m in g] + ["1" + m for m in reversed(g)]
Preuve de correction : Par récurrence. Les mots de la première moitié (commençant par 0) et ceux de la seconde moitié (commençant par 1) diffèrent au plus d'un bit consécutivement par hypothèse de récurrence sur gray(n-1). Au point de bascule entre les deux parties, le dernier mot de la première moitié est 0 + m (où m est le dernier mot de gray(n-1)) et le premier mot de la seconde moitié est 1 + m (puisque la liste est inversée). Ces deux mots ne diffèrent que par leur premier bit (0 vs 1), la transition est donc valide.
Exercices semblables
- Le tracé de Sierpinski corrigé
- Les sous-listes d'une somme donnée corrigé
- Convertir une récursion en boucle corrigé
- Les tours de Hanoï corrigé
- Pile bornée — estimer avant d'exécuter corrigé