Adloun

OCaml (option informatique) · Chapitre 11 · Exercice de TD

Compter les sous-ensembles de somme donnée

Récursivité et retour sur trace · niveau 2

É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 < 0 compte (on a dépassé).

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre