(defun factorial (n) (if (= n 0) 1 (* (factorial (- n 1)) n))) ;; (factorial 3) ;; = (* (* (* (factorial 0) n1) n2) n3) ;; = (* (* (* 1 n1) n2) n3) ;; = (* (* (* 1 1) n2) n3) ;; = (* (* 1 2) n3) ;; = (* 2 3) ;; 6 ;; [6]> (trace factorial) ;; ;; Tracing function FACTORIAL. ;; (FACTORIAL) ;; [7]> (factorial 3) ;; 1. Trace: (FACTORIAL '3) ;; 2. Trace: (FACTORIAL '2) ;; 3. Trace: (FACTORIAL '1) ;; 4. Trace: (FACTORIAL '0) ;; 4. Trace: FACTORIAL ==> 1 ;; 3. Trace: FACTORIAL ==> 1 ;; 2. Trace: FACTORIAL ==> 2 ;; 1. Trace: FACTORIAL ==> 6 ;; 6
追記
なお、上の例だと、n=0のケースが歯止めとなっており、これ以上再帰させないための条件を境界条件という。