(* Recherche dichotomique dans une liste triée *) Random.init (int_of_float (Sys.time()));; let cree_hasard maxi n = Array.init n (function k -> Random.int maxi);; let tab_has=cree_hasard 1000 500;; Sort.array (function a -> (function b -> a < b)) tab_has;; (* ci-dessous une belle erreur bien perfide! *) let cherche n tab= let rec essaye min max= print_string "min : ";print_int min; print_string "max : ";print_int max;print_newline(); let milieu=tab.((min+max)/2) in if min=max then if n=tab.(min) then print_string "gagné" else print_string "perdu" else if n>tab.((min+max)/2) then essaye ((min+max)/2) max else essaye min ((min+max)/2) in essaye 0 (Array.length tab -1) ;; let cherche n tab= let rec essaye min max= print_string "min : ";print_int min; print_string "max : ";print_int max;print_newline(); let milieu=tab.((min+max)/2) in if min>=max -1 then if (n=tab.(min) or n =tab.(max)) then print_string "gagné" else print_string "perdu" else if n>tab.((min+max)/2) then essaye ((min+max)/2) max else essaye min ((min+max)/2) in essaye 0 (Array.length tab -1) ;;