TD 02 Caml : Récursions

(* Produit de tous les termes d'une liste *)
let rec mult_list(liste) =
    if liste =[]
       then 1
    else
        hd(liste) * mult_list(tl(liste))
;;

(* Avec pattern matching *)
let rec mult_list2(liste) =
    match liste with
      [] -> 1
    | tete::queue -> tete * mult_list(queue)
;;

(* Détermine l'élément le plus grand parmis une liste *)
let rec max_de_liste liste =
    match liste with
     [t] -> t
     | tete::queue ->
                  let max_queue  = max_de_liste(queue) in
                      if tete > max_queue
                      then tete
                      else max_queue
;;

(* Concatène 2 listes *)
let rec concatene liste1 liste2 =
    match liste1 with
      [] -> liste2
    | tete::queue -> tete::concatene queue liste2
;;

(* Inverse l'ordre des éléments d'une liste *)
let retourne liste =
    let rec concat_retourne liste1 liste2 =
        match liste1 with
            [] -> liste2
          | tete::queue -> concat_retourne queue (tete::liste2)
     in concat_retourne liste []
;;

(* Calcul de la suite de fibonnaci. *)
let fibonacci n = 
    if n = 0
        then 1
        else let rec grand_U n = match n with
             1 -> 1,1  (* U1=(1,1) *)
           |_  -> match grand_U(pred n) with
                     x,y -> y,(x+y)
                  in match grand_U n with 
                  _,y -> y
;;

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :