OCaml (option informatique) · Chapitre 11 · Exercice de TD
Reconstruire le sous-ensemble
Récursivité et retour sur trace · niveau 3 (difficile)
Énoncé
Écrire trouve_somme l cible : int list option qui renvoie un sous-ensemble de somme cible (et pas seulement son existence), ou None.
Corrigé
let rec trouve_somme l cible =
if cible = 0 then Some []
else
match l with
| [] -> None
| x :: reste ->
match trouve_somme reste (cible - x) with
| Some s -> Some (x :: s) (* x fait partie de la solution *)
| None -> trouve_somme reste cible (* sinon, chercher sans x *)
On essaie d'abord de prendre x : si la suite réussit, on l'ajoute à la solution rapportée ; sinon, on cherche sans lui. Le type option porte à la fois l'échec (None) et la solution reconstruite (Some s) — le backtracking « remonte » la solution le long des choix réussis.
Exercices semblables
- Permutations corrigé
- Compter les sous-ensembles de somme donnée corrigé
- Combinaisons corrigé
- Les reines corrigé
- Sortie d'un labyrinthe corrigé