; VersiOn aplicando la definiciOn directamente ; int -> int (defun fibonacci (n) (if (< n 2) 1 (+ (fibonacci (1- n)) (fibonacci (- n 2))))) ; VersiOn "optimizada". El truco consiste en aplicar ; la definiciOn "hacia delante". ; int -> int (defun fibonacci-opt (n) (case n ((1 2) 1) (t (fibonacci-opt-aux 1 1 2 n)))) (defun fibonacci-opt-aux (fn1 fn2 i n) (if (= i n) (+ fn1 fn2) (fibonacci-opt-aux fn2 (+ fn1 fn2) (1+ i) n)))