Посчитать с заданной точностью сумму бесконечного ряда - 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д