Функция в COMMON LISP, Emacs

У меня есть задание - в среде LISP реализовать функцию f(n) = 5 * (f(n-1))^2 + 4 * f(n-2), где f(1) = 2, f(2) = 4. Нужно реализовать два варианта такой функции - f1 и f2. Первая решает задачу рекурсивно, а вторая - итерационно. После чего с помощью системной функции time нужно сравнить вычислительную сложность f1 и f2 при n = 10. С вариантом f1 я справился:

(defun f1 (n) 
    (cond ((= n 1) 2) 
          ((= n 2) 4) 
          (t (+ (* 5 (expt (f1 (- n 1)) 2)) (* 4 (f1 (- n 2)))))))

С реализацией функции f2 у меня что-то не так, и не могу понять, что именно. Вот её реализация:

(defun f2 (n) 
    (let ((k (- n 2)) (a 2) (b 4) (new 0)) 
        (cond ((= n 1) 2) 
              ((= n 2) 4)) 
        (dotimes (i k) 
              (setf new (+ (* 5 (expt (f2 b) 2)) (* 4 (f2 a)))) 
              (setf a b) 
              (setf b new))))

И ещё почему-то функция time не работает, если попробовать выполнить команду вроде следующей:

(time (f1 5))

Ответы (0 шт):