OCaml (option informatique) · Chapitre 4 · Exercice de TD
Suite de Syracuse
Programmation impérative : références et boucles · niveau 2
Énoncé
Écrire syracuse n (), le nombre d'étapes pour atteindre (étape : si pair, sinon), avec une boucle while.
Corrigé
let syracuse n =
let m = ref n and etapes = ref 0 in
while !m <> 1 do
if !m mod 2 = 0 then m := !m / 2
else m := 3 * !m + 1;
etapes := !etapes + 1
done;
!etapes
On itère la transformation jusqu'à atteindre 1, en comptant les étapes. Contrairement aux exemples précédents, on ne connaît aucun variant prouvant la terminaison pour tout n : c'est la conjecture de Syracuse, ouverte à ce jour. La boucle s'arrête en pratique, mais nul ne sait le démontrer en général.
Exercices semblables
- PGCD impératif corrigé
- Fibonacci itératif corrigé
- Compter les diviseurs corrigé
- Racine carrée entière corrigé
- Test de primalité corrigé