Функция в 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))