Adloun

Compter les sous-ensembles de somme donnée

Exercice · OCaml (option informatique), chapitre 11 — Récursivité et retour sur trace

Énoncé

Modifier existe_somme en compte_somme l cible qui compte le nombre de sous-ensembles de somme cible.

Corrigé

let rec compte_somme l cible =
  if cible = 0 then 1
  else if cible < 0 then 0
  else
    match l with
    | [] -> 0
    | x :: reste ->
        compte_somme reste (cible - x) + compte_somme reste cible

On remplace le « trouvé / pas trouvé » (||) par une addition des deux sous-comptes : avec x, sans x. Le cas cible = 0 compte (l'ensemble construit convient) ; cible &lt; 0 compte (on a dépassé).

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.