Evaluation des fonctions récursives, itératives et CPS

Application, bien évidemment, à la factorielle...

Version récursive :

     (define (fac-rec n)
       (if (zero? n)
           1
           (* n (fac-rec (sub1 n)))))

Recursive evaluation

Version itérative (récursive terminale) :

     (define (fac-iter n)
       (letrec ((iter (lambda (n acc)
                        (if (zero? n)
                            acc
                            (iter (sub1 n) (* n acc))))))
         (iter n 1)))

Iterative evaluation

Version CPS (Continuation Passing Style) :

     (define (fac-cps n f)
       (if (zero? n)
           (f 1)
           (fac-cps (sub1 n)
                    (lambda (x) (f (* n x))))))

CPS evaluation



Dernière mise à jour : 02/04/2009 à 23:00
Valid XHTML 1.0!