Prog Caml : Fonction etapes_syracuses récursive

Ecrivez la fonction récursive etapes_syracuses qui retourne le nombre d'étapes nécessaire pour arriver à 1 à partir du paramètre n. L'idée est simple. Si n vaut 1, il n'y a aucune étape à faire, et on retourne 0. Sinon, on renvoie le nombre d'étapes nécessaires pour arriver à 1 à partir de etapes_Syracuses n, augmenté de 1.

Limites de temps et de mémoire (Python)

  • Temps : 4 s sur une machine à 1 GHz.
  • Mémoire : 1 000 ko.

Exemple

entrée :

7

sortie :

16

Commentaires

Code à compléter Caml

let read_int() = Scanf.scanf " %d" (fun x -> x);;

let syracuse p =
  if p mod 2 = 0
     then p / 2
     else 3 * p + 1
 ;;


let rec etapes_syracuses n =
(*à compléter*)
  in

print_int ( etapes_syracuses (read_int())) ;;

Source : http://www.france-ioi.org/ Créé par : Arthur Charguéraud.