(* récursion <---> itération et de l'intérêt de la récursion terminale ...*) (* on connaît f, on connait u(0)=a, on veut u(1000000) *) let f t= t+2;; let a=5;; (* version récursive pure *) let rec u_rec =function |0->a |n->f (u_rec (n-1)) ;; (* version itération avec boucle et référence *) let u_iter_ref n= let z=ref a in for k=1 to n do z:=f !z done; !z ;; (* version récursion terminale *) let rec_term_u n= let rec eval_u p valeur = if p = n then valeur else eval_u (p+1) (f valeur) in eval_u 0 a ;; (* 5 secondes pour u_iter_ref 1000000;; *) (* Uncaught exception: Out_of_memory pour u_rec 1000000;; *) (* 3 secondes pour rec_term_u 1000000;; *)