Reconstruire le sous-ensemble
Exercice · OCaml (option informatique), chapitre 11 — Récursivité et retour sur trace
É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.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.