Python (école d'ingénieur) · Chapitre 2 · Exercice
Suite de Syracuse (Conjecture de Collatz)
Structures de contrôle : conditions et boucles
Énoncé
La suite de Syracuse est définie par : La conjecture affirme que pour tout , la suite atteint 1. Écrire une fonction temps_de_vol(n) qui renvoie le nombre d'étapes pour atteindre 1.
Corrigé
def temps_de_vol(n):
"""
Retourne le temps de vol de n (nombre d'étapes jusqu'à 1)
Précondition : n >= 1
"""
if n <= 0:
raise ValueError("L'entrée doit être positive")
etapes = 0
while n != 1:
if n % 2 == 0:
n //= 2
else:
n = 3 * n + 1
etapes += 1
return etapes
Exemples :
| Suite | Temps de vol | |
|---|---|---|
| 1 | 1 | 0 |
| 2 | 1 | |
| 3 | 7 | |
| 6 | 8 |
Remarque algorithmique : On peut utiliser la mémoïsation avec functools.lru_cache pour optimiser :
from functools import lru_cache
@lru_cache(maxsize=None)
def temps_de_vol_memo(n):
if n == 1:
return 0
if n % 2 == 0:
return 1 + temps_de_vol_memo(n // 2)
else:
return 1 + temps_de_vol_memo(3 * n + 1)100 % gratuit
La suite du chapitre est sur Adloun
- 4 autres exercices corrigés dans ce chapitre, et 5 à chercher avec le tuteur
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.