Info_3_mars_2023.ml 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. let rec deplace n i j k =
  2. if n = 1 then
  3. begin
  4. print_string (string_of_int 1 ^ " -> " ^ string_of_int j);
  5. print_newline ()
  6. end
  7. else
  8. begin
  9. deplace (n-1) i k j;
  10. print_string (string_of_int 1 ^ " -> " ^ string_of_int j);
  11. deplace (n-1) k j i;
  12. print_newline ()
  13. end
  14. ;;
  15. let hanoi n =
  16. deplace n 1 2 3;;
  17. hanoi 10;;
  18. (* let rec a n a0 b0= match n with
  19. | 0 -> a0
  20. | _ -> (a (n-1) a0 +. b(n-1) b0) /. 2.
  21. and b n a0 b0 = match n with
  22. | 0 -> b0
  23. | _ -> sqrt (a n a0 *. b n b0);; *)
  24. let rec correctan a0 b0 n = match n with
  25. | 0 -> a0
  26. | _ -> (correctan a0 b0 (n-1) +. (correctbn a0 b0 (n-1))) /. 2.
  27. and correctbn a0 b0 n = match n with
  28. | 0 -> b0
  29. | _-> sqrt ((correctan a0 b0 (n-1)) *. (correctbn a0 b0 (n-1)))
  30. let rec pair n = match n with
  31. | 0 -> true
  32. | _ -> impair (n-1)
  33. and impair n = match n with
  34. | 0 -> false
  35. | _-> pair (n-1);;
  36. let rec facto n = match n with
  37. | 0 -> 1
  38. | _ -> n * facto (n-1)
  39. let rec facto_aux n acc k = match k with
  40. | k when k=n -> acc
  41. | _ -> facto_aux n (acc*(k+1)) (k+1);;
  42. let facto_term n =
  43. facto_aux n 1 0;;
  44. let rec facto_aux2 n acc= match n with
  45. | 0 -> acc
  46. | _ -> facto_aux2 (n-1) (acc*(n));;
  47. let facto_term2 n =
  48. facto_aux2 n 1;;
  49. let rec puissance a n = match n with
  50. | 0 -> 1
  51. | _ -> a * puissance a (n-1);;
  52. let rec puissanceaux1 a n acc k = match k with
  53. | k when k=n -> acc
  54. | _ -> puissanceaux1 a n (acc*a) (k+1);;
  55. let puissance_term1 a n =
  56. puissanceaux1 a n 1 0;;
  57. let rec puissanceaux2 a n acc = match n with
  58. | 0 -> acc
  59. | _ -> puissanceaux2 a (n-1) (acc*a);;
  60. let puissance_term2 a n =
  61. puissanceaux2 a n 1;;
  62. let rec f_un n f acc k = match n with
  63. | k when k=n -> acc
  64. | _ -> f_un n f (f acc) (k+1);;
  65. let f_unterm1 n f u0 = f_un n f u0 0;;
  66. let rec f_un2 n f acc = match n with
  67. | 0 -> acc
  68. | _ -> f_un2 (n-1) f (f acc);;
  69. let f_unterm2 n f u0 = f_un2 n f u0;;
  70. let rec suminv n k acc = match k with
  71. | k when k=n -> acc
  72. | _ -> suminv n (k+1) (acc +. 1. /. ((float_of_int k)**2.))
  73. let rec suminvprof n acc = match n with
  74. | 1.0 -> acc
  75. | _ -> suminvprof (n-.1.0) (acc +.(1./.n)**2.);;
  76. let sommeint n = suminvprof (float_of_int n) 1.0;;
  77. let rec fibo_aux n acc1 acc2 = match n with
  78. | 0 -> acc1
  79. | _ -> fibo_aux (n-1) (acc2) (acc1+acc2);;
  80. let fibo n = fibo_aux n 0 1;;
  81. let rec pour phi d n = match n with
  82. | 0 -> d
  83. | _ -> phi (pour phi d (n-1));;
  84. let rec pourterm phi d n =match n with
  85. | 0 -> d
  86. | _ -> pourterm phi (phi d) (n-1);;
  87. let puissancepour a n = pour (function x -> a*x) 1 n;;
  88. let rec tantque cond phi d = match (cond d) with
  89. | true -> tantque cond phi (phi d)
  90. | false -> d;;
  91. let rec aux a x n= match n with
  92. | 0 -> x
  93. | _ -> aux a (a*x) (n-1);;
  94. let puissanceaux3 a n = aux a 1 n;;
  95. let rec auxfibo (x,y) n = match n with
  96. | 0 -> x
  97. | _ -> auxfibo (y, x+y) (n-1);;
  98. let auxfiboterm n = auxfibo (0,1) n;;
  99. (* let rec pgcd2prof a b = match (a,b) with
  100. | (a,0) -> a
  101. | (a,b) when a<b -> pgcd2prof b a
  102. | _ -> pgcd2prof (a-b) b;; *)
  103. let pgcd2iter a b = let c = ref a and d = ref b in
  104. while !d <> 0 do
  105. if !d > !c then
  106. begin
  107. let aux = !c in
  108. c := !d;
  109. d := aux
  110. end
  111. else
  112. c := !c - !d
  113. done;
  114. !c
  115. ;;