Посчитать с заданной точностью сумму бесконечного ряда - Lisp
Формулировка задачи:
Задача:посчитать с заданной точностью сумму бесконечного ряда,каждый член которого задается формулой: x^k/k!( что есть exp(x))
Не могу понять почему не работает код(выдает ошибку file-of-end),вообще его нужно реализовать с помощью цикла loop,но я пытался и рекурсивным способом,тщетно.
(defun faK(x) (cond((eq x 0) 1) ((eq x 1) 1) ((< x 0) nil) (t ( * x (faK (- x 1)))))) (defun sumr(x e) ((setq i 0) (setq s 0) (loop (setq s (+ s (/ (expt x i) faK(i)))) (if ( > (abs s) 3)(return s) nil) (setq i (+ i 1)))))) (defun sumr(x e i);;рекурсивный способ (t (cond (< (abs (/ (expt x i) faK(i))) e) (+ 0 sumr x e (+ i 1)))))
Решение задачи: «Посчитать с заданной точностью сумму бесконечного ряда»
textual
Листинг программы
(defun sumr(x e) (let ((i 0) (s 0)) (loop (setf s (+ s (/ (expt x i) (fak i)))) (when ( > (abs s) e) (return s)) (incf i))))
Объяснение кода листинга программы
В данном коде:
- Создаётся функция
sumr
с двумя аргументамиx
иe
. - В функции используется замыкание
let
, чтобы создать две переменныеi
иs
со значениями 0. - Используется цикл
loop
, который выполняется до тех пор, пока абсолютное значение суммыs
не превысит значениеe
. - Внутри цикла значение переменной
s
увеличивается на суммуs
и результата вычисления(expt x i) / (fak i)
. - Значение переменной
i
увеличивается на 1 после каждой итерации цикла. - Когда условие цикла не выполняется, функция возвращает значение переменной
s
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д