Рекурсивная функция для вычисления корня квадратного - Lisp

Узнай цену своей работы

Формулировка задачи:

Вычислить с точностью до 6 знаков, сравнив по числу шагов, рекурсивную формулу

Решение задачи: «Рекурсивная функция для вычисления корня квадратного»

textual
Листинг программы
(defun sqrt! (x &optional (p x) (eps 0.0000001))
  (let ((q (* 0.5 (+ p (/ x p)))))
     (if (< (abs (- q p)) eps) q (sqrt! x q eps))))
  
 
 
==> sqrt!
 
(sqrt! 14)
 
==> 3.74165738677394
 
(^ 3.74165738677394 2)
 
==> 14.0

Объяснение кода листинга программы

В коде определена рекурсивная функция sqrt!, которая вычисляет квадратный корень из числа x. В функции используется опциональный параметр p, который позволяет улучшить сходимость вычислений. По умолчанию значение p равно x. Также в функции есть параметр eps, который позволяет задать требуемую точность вычислений. По умолчанию значение eps равно 0.0000001. В функции используется локальная переменная q, в которой при каждой итерации вычисления обновляется значение текущего приближения к корню. Используется цикл while, который выполняется до тех пор, пока абсолютное значение разности текущего приближения к корню и параметра p не станет меньше требуемой точности eps. В каждой итерации значение q обновляется как среднее арифметическое между текущим приближением к корню и параметром p, умноженное на 0.5. Если условие цикла while выполняется, то функция sqrt! возвращает текущее значение q. Если условие цикла while не выполняется, то функция sqrt! вызывает саму себя, передавая в качестве аргументов число x, текущее значение q и параметр eps. В данном примере функция sqrt! вызывается с аргументом 14, и возвращает результат 3.74165738677394. Затем результат 3.74165738677394 возводится в квадрат с помощью оператора ^, и результат вычисления равен 14.0.

Оцени полезность:

12   голосов , оценка 4.25 из 5
Похожие ответы