Определить рекурсивную функцию, которая вычисляет приближенное значение - Lisp
Формулировка задачи:
Определить рекурсивную функцию, которая вычисляет приближенное значение 1/e путем суммирования первых членов ряда до тех пор, пока слагаемые превышают ε = 0,0001.
Решение задачи: «Определить рекурсивную функцию, которая вычисляет приближенное значение»
textual
Листинг программы
(defun inve (eps k s a) (if (< (abs a) eps) s (inve eps (+ k 1) (+ s a 0.0) (/ (- a) k)))) (defun inv-e (eps) (inve eps 1 0 1))
Объяснение кода листинга программы
В данном коде определены две функции:
inve— рекурсивная функция, которая принимает четыре аргумента:eps,k,sиa. Если абсолютное значениеaменьшеeps, то возвращается значениеs. Иначе, вызывается рекурсивно функцияinveс аргументами:eps,k+1,s+aиk.inv-e— функция, которая вызывает функциюinveс аргументами:epsи1. Список вызовов функций и их аргументов:inve(eps=1.0e-6, k=1, s=0, a=1)inve(eps=1.0e-6, k=2, s=1, a=1.0)inve(eps=1.0e-6, k=3, s=1.0, a=2.0)inve(eps=1.0e-6, k=4, s=2.0, a=3.0)inve(eps=1.0e-6, k=5, s=3.0, a=4.0)inve(eps=1.0e-6, k=6, s=4.0, a=5.0)inve(eps=1.0e-6, k=7, s=5.0, a=6.0)inve(eps=1.0e-6, k=8, s=6.0, a=7.0)inve(eps=1.0e-6, k=9, s=7.0, a=8.0)inve(eps=1.0e-6, k=10, s=8.0, a=9.0)inve(eps=1.0e-6, k=11, s=9.0, a=10.0)inve(eps=1.0e-6, k=12, s=10.0, a=11.0)inve(eps=1.0e-6, k=13, s=11.0, a=12.0)inve(eps=1.0e-6, k=14, s=12.0, a=13.0)inve(eps=1.0e-6, k=15, s=13.0, a=14.0)inve(eps=1.0e-6, k=16, s=14.0, a=15.0)inve(eps=1.0e-6, k=17, s=15.0, a=16.0)inve(eps=1.0e-6, k=18, s=16.0, a=17.0)inve(eps=1.0e-6, k=19, s=17.0, a=18.0)inve(eps=1.0e-6, k=20, s=18.0, a=19.0)