recursivite.ml 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. let suite_iteratif u0 n f = let u = ref u0 in
  2. for i = 1 to n do
  3. u := f !u
  4. done;
  5. !u;;
  6. let rec suite_recursif u0 n f = if n = 0 then u0 else f (suite_recursif u0 (n-1) f);;
  7. let factorielle_iter n = let f = ref 1 in
  8. for i = 1 to n do
  9. f := !f * i
  10. done;
  11. !f;;
  12. let rec factorielle_rec n = if n = 0 then 1 else n * factorielle_rec (n-1);;
  13. let puissance_iter x n = let p = ref 1 in
  14. for i = 1 to n do
  15. p := !p * x
  16. done;
  17. !p;;
  18. let rec puissance_rec x n = if n = 0 then 1 else x * puissance_rec x (n-1);;
  19. let rec carre n = match n with
  20. | 0 -> 0
  21. | _ -> -1 + carre (n-1) + 2 * n;;
  22. let rec somme p q = match p with
  23. | 0 -> q
  24. | _ -> somme (p-1) (q+1);;
  25. let rec produit p q = match p with
  26. | 0 -> 0
  27. | _ -> somme q (produit (p-1) q);;
  28. let rec min1 t = let n = Array.length t in
  29. match n with
  30. | 1 -> t.(0)
  31. | _ -> let m = min1 (Array.sub t 1 (n-1)) in
  32. if t.(0) < m then t.(0) else m;;
  33. (*On veut maintenant l'indice du minimum*)
  34. let rec min2 t = let n = Array.length t in
  35. match n with
  36. | 1 -> 0
  37. | _ -> let m = min2 (Array.sub t 1 (n-1)) in
  38. if t.(0) < t.(m+1) then 0 else m+1;;
  39. let rec produit_egyptien p q = match p with
  40. | 0 -> 0
  41. | _ -> if p mod 2 = 0 then produit_egyptien (p/2) (2*q)
  42. else q + produit_egyptien (p-1) q;;
  43. let rec division_euclidienne p q = if p < q then (0,p) else
  44. let (a,b) = division_euclidienne (p-q) q in
  45. (a+1,b);;
  46. let rec pgcd a b = if b = 0 then a else pgcd b (a mod b);;
  47. let rec fibo1 n = match n with
  48. | 0 -> 0
  49. | 1 -> 1
  50. | _ -> fibo1 (n-1) + fibo1 (n-2);;
  51. let rec coefficient_binomial n p = if p = 0 || p = n then 1
  52. else coefficient_binomial (n-1) (p-1) + coefficient_binomial (n-1) p;;
  53. (*Hanoi*)
  54. let rec deplace n i j k =
  55. if n = 1 then print_string ("Deplacer le disque de " ^ string_of_int i ^ " vers " ^ string_of_int j ^ "\n")
  56. else (deplace (n-1) i k j; deplace 1 i j k; deplace (n-1) k j i);;
  57. let hanoi n = deplace n 1 2 3;;